跳转至

510.二叉搜索树中的中序后继 II (Medium)*

题目描述*

思路 & 代码*

结点带指向父节点的指针就简单多了,右结点为空则向上找到第一个以此子树为左子树的结点,右结点非空向下找到右子树的最左结点。

class Solution {
public:
    Node* inorderSuccessor(Node* node) {
        if(node == nullptr) {
            return nullptr;
        }
        // 右子树为空则结果为以此子树为左子树的第一个结点
        if(node->right == nullptr) {
            while(node->parent != nullptr) {
                auto root = node->parent;
                if(root->left == node) {
                    return root;
                }
                node = root;
            }
        }else {
            auto p = node->right;
            while(p->left != nullptr) {
                p = p->left;
            }
            return p;
        }
        return nullptr;
    }
};

最后更新: July 23, 2022