剑指Offer57:二叉树的下一个结点(Java)
参考“小河沟大河沟”的牛客解答:https://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e?f=discussion
思路分析:
首先中序遍历的一个结点的下一个节点不可能在左子树上。
1.若有右子树则在右子树最左的结点;
2.若没有右子树,下一个节点是父节点且必须满足父节点是爷爷结点的左孩子,
若有父节点,但不满足父节点是爷爷结点的左孩子,则向上走(pNode=pNode.next),判断爷爷节点是否满足条件,直到满足条件或者没有父节点了,没有父结点返回null
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
Java代码:
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if(pNode.right!=null){
pNode=pNode.right;
while(pNode.left!=null){
pNode=pNode.left;
}
return pNode;
}
while(pNode.next!=null){
if(pNode.next.left==pNode){
return pNode.next;
}
pNode=pNode.next;
}
return null;
}
}