题目描述
设计一个算法,找出二叉搜索树中指定节点的 “下一个” 节点(也即中序后继)。如果指定节点没有对应的 “下一个” 节点,则返回null。
示例 1:
输入: root = [2,1,3], p = 1
输出: 2
示例 2:
输入: root = [5,3,6,2,4,null,null,1], p = 6
输出: null
使用二叉树中序遍历的非递归形式,在遍历中如果找到节点与给定的 p 节点相等的话,将哨兵做个标记,然后根据哨兵来寻找下一个节点。
class Solution {
public:
TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
stack<TreeNode*> stk;
auto q=root;
bool flag=false;
while(q||stk.size())
{
if(q)
{
stk.push(q);
q=q->left;
}
else
{
q=stk.top(); stk.pop();
if(flag) return q;
if(q==p) flag=true;
q=q->right;
}
}
return nullptr;
}
};