/*
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)
{
//第一种情况:pNode的右孩子不为空。
if (pNode.right!=null){
TreeLinkNode temp =pNode.right;
while (temp.left!=null){
temp=temp.left;
}
return temp;
}else {
//右孩子为空
//第二种情况:pNode的右孩子为空,并且pNode是父亲节点的左孩子
TreeLinkNode tempNode =pNode.next;
if(tempNode==null){
return null;
}
if (tempNode.left==pNode){
return tempNode;
}else {
//第三种情况:pNode的右孩子为空,并且pNode是父亲节点的右孩子。
boolean flag =false;
//判断是否是中序遍历最后一个节点
while (tempNode.next!=null){
if (tempNode.next.left==tempNode){
flag=true;
break;
}
tempNode=tempNode.next;
}
return flag ? pNode.next.next:null;
}
}
}
}
江的福从零开始刷算法(二叉树的下一个节点(剑指offer))
最新推荐文章于 2024-11-12 21:59:57 发布