题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
解题思路:
树中节点的下一个节点分三种情况分析:1.当前节点存在右子树,则其为右子树最左端的节点; 2.当前节点无右子树,并且该节点为父节点的左子树,则下个节点是其父节点;3. 当前节点无右子树,且该节点是父节点的右子树,则需要向上进行查找,即父节点的下一个节点也是该节点的下一个节点。直到达根节点,则 下一个节点为null。
剑指offer中因为设立一个next指针初始是指向父节点的,是解题变的简单,若没有将next初始化指向父节点,则需要使用到堆栈
Java代码:
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode){
TreeLinkNode p=pNode;
if(pNode==null) return null;
if(pNode.right!=null){ //右子树存在
p=pNode.right;
while(p.left!=null){
p=p.left;
}
return p;
}
else{
while(p.next!=null){
if(p.next.left==p){ //父节点左子树是否等于当前节点
return p.next;
}
else{
p=p.next;
}
}
return null;
}
}
}