📜  获取二叉树中的最大左节点(1)

📅  最后修改于: 2023-12-03 14:57:13.539000             🧑  作者: Mango

获取二叉树中的最大左节点

在二叉树中,节点有左子节点和右子节点之分,而最大左节点就是二叉树中从根节点开始,一直向左走到底的节点中,值最大的那个节点。

以下是获取二叉树中最大左节点的算法代码:

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

int getMaxLeft(TreeNode* root) {
    if (root == NULL) {
        return INT_MIN;
    }
    int maxLeft = INT_MIN;
    TreeNode* cur = root->left;
    while (cur != NULL) {
        maxLeft = max(maxLeft, cur->val);
        cur = cur->left;
    }
    return maxLeft;
}

该算法的复杂度为 $O(h)$,其中 $h$ 是二叉树的高度。

该算法的思路是先判断根节点的左子节点是否为空(如果为空,那么就没有最大左节点),然后通过循环找到根节点的最大左节点。具体来说,从根节点的左子节点开始,一直向左走到底,每次记录下走过的节点中的值最大的节点。最后返回这个最大值即可。

需要注意的是,这里使用了一个较为简单的递归函数,但实际上可以用更加高效的方式实现。

在实际编写代码时,还应注意判断节点指针是否为 NULL,以及如何处理节点值相同的情况等问题。