二叉搜索树的最小节点位于最左侧路径末端,可通过递归或迭代方法查找;递归法不断深入左子树直至无左子节点,迭代法循环向左移动直至左子节点为空。

在C++中查找二叉搜索树(BST)的最小节点,关键在于理解BST的性质:对于任意节点,其左子树的所有节点值都小于它,右子树的所有节点值都大于它。因此,最小值一定位于树的最左侧路径的末端。
递归方法查找最小节点
通过递归方式,不断向左子树深入,直到遇到没有左子节点的节点为止,该节点即为最小节点。
- 如果当前节点为空,返回空指针
- 如果当前节点没有左子节点,说明已到达最左端,返回当前节点
- 否则递归查找左子树
示例代码:
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode findMinRecursive(TreeNode root) {
if (!root) return nullptr;
if (!root->left) return root;
return findMinRecursive(root->left);
}
迭代方法查找最小节点
迭代方式更节省空间,避免了递归带来的函数调用栈开销。使用循环持续向左走,直到左子节点为空。
立即学习“C++免费学习笔记(深入)”;
- 从根节点开始
- 只要当前节点有左子节点,就移动到左子节点
- 当无法再向左时,当前节点就是最小值节点
示例代码:
TreeNode* findMinIterative(TreeNode* root) {
while (root && root->left) {
root = root->left;
}
return root; // 若根为空,直接返回空
}
实际使用注意事项
在调用这些函数前,建议先判断树是否为空,避免对空指针解引用。若只是需要最小节点的值,记得检查返回指针是否为空后再访问val成员。
例如:
if (TreeNode* minNode = findMinIterative(root)) {
std::cout << "最小值是: " << minNode->val << std::endl;
} else {
std::cout << "树为空" << std::endl;
}
基本上就这些。利用BST左小右大的特性,找最小值就是一路向左,简单高效。无论是递归还是迭代,都能快速定位最小节点。











