跳转至

285.二叉搜索树中的顺序后继 (Medium)*

题目描述*

标签*

二叉搜索树;

思路 & 代码*

顺序后继就是中序的下一个结点,如果 p 有右结点,那么后继结点就是右子树的最左结点,没有右结点,就需要从根节点开始中序遍历,记录前驱结点值,前驱为 p->val 时返回。

class Solution {
public:
    TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
        if(root == nullptr || p == nullptr) {
            return nullptr;
        }
        if(p->right != nullptr) {
            auto cur = p->right;
            while(cur->left != nullptr) {
                cur = cur->left;
            }
            return cur;
        }else {
            stack<TreeNode*> st;
            auto cur = root;
            long prev = LONG_MIN;
            while(cur != nullptr || !st.empty()) {
                while(cur != nullptr) {
                    st.push(cur);
                    cur = cur->left;
                }
                cur = st.top();
                st.pop();
                if(prev == p->val) {
                    return cur;
                }
                prev = cur->val;
                cur = cur->right;
            }
        }
        return nullptr;
    }
};

最后更新: July 23, 2022