struct TreeNode
{
int value;
TreeNode* left;
TreeNode* right;
TreeNode* parent;
};
//首先分为三种情况,由于是中序遍历,当执行到节点时,如果该节点存在右子树 则下一个节点就是右子树的最左节点;
//如果没有右子树,则细分有三种情况:
//1.该节点是其父节点的左子节点,则遍历输出的下一个节点就是父节点
//2.该节点是其父节点的右子节点,则遍历输出的下一个节点应当往上追溯至节点为其父节点的左子节点,然后输出父节点(由此可得1为2的特殊情况)
//3.该节点的父节点为空(根节点),则遍历输出也为空,不做处理即可
TreeNode* GetNext(TreeNode* Node)
{
TreeNode* Next = nullptr;
if(Node == nullptr)
return nullptr;
if(Node->right != nullptr)
{
Next = Node->right;
while (Next->left!=nullptr)
{
Next = Next->left;
}
}
else if(Node->parent != nullptr)
{
TreeNode* Current = Node;
TreeNode* parent = Node->parent;
while (parent!= nullptr && Current != parent->left)
{
Current = parent;
parent = parent->parent;
}
Next = parent;
}
return Next;
}
【剑指Offer】面试题8 寻找二叉树中序遍历的下一个节点
最新推荐文章于 2021-06-17 23:53:17 发布