题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
1.如果该结点有右孩子那么下一个结点一定对应着其右孩子最左边的结点。
2.如果该结点没有右孩子,但该结点是其父亲结点的左孩子,那么下一个结点指向其父亲结点
3.如果该结点没有右孩子,且该结点是其父亲结点的右孩子,那么一直往上层遍历直到找到一个是它父结点左结点的结点。
/*
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;//指向父亲结点
TreeLinkNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
//判空
if(pNode==null){
return null;
}
TreeLinkNode nextNode=null;
//如果结点还有右子树下一个结点一定在其右子树最左边
if(pNode.right!=null){
TreeLinkNode tempNode=pNode.right;
while(tempNode.left!=null){
tempNode=tempNode.left;
}
nextNode=tempNode;
}else if(pNode.next!=null){
TreeLinkNode currentNode=pNode;
TreeLinkNode parentNode=pNode.next;
while(parentNode!=null && parentNode.right==currentNode){
//往上层走
currentNode=parentNode;
parentNode=parentNode.next;
}
nextNode=parentNode;
}
return nextNode;
}
}