/*
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;
}
if(pNode.right != null){//如果当前节点有右子树,则next值为右子树的最左节点
pNode = pNode.right;
while(pNode.left != null){
pNode = pNode.left;
}
return pNode;
}
while(pNode.next != null){//如果没有右子树,则看当前节点是否是父节点的左节点,如果是父节点就是next。不是就一直往上找
if(pNode.next.left == pNode){
return pNode.next;
}
pNode = pNode.next;
}
return null;
}
}
按照可以定义parent指针的方法,弱化java语法
public class Solution {
public TreeLinkNode GetNext(Node node)
{
if(node == null){
return null;
}
if(node.right != null){
return getMostLeft(node.right);
}else{
Node parent = node.parent;
while(parent != null && parent.left != node){
node = parent;
parent = node.parent;
}
return parent;
}
return null;
}
public Node getMostLeft(Node node){
if(node == null){
return null;
}
while(node.left != null){
node = node.left;
}
return node;
}
}