思路是:分两大类节点:有右节点和无右节点 有右节点:直接找右节点的最高(最底层)且最左的节点,就是该节点。 没有右节点:先判断是否是根节点,是根节点则返回null(因为没有右节点了),不是根节点判断是左节点还是右节点。是左节点:直接返回父节点(因为没有右节点),是右节点返回拐角处节点的父节点(用两个指针判断拐角点)。
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.right != null){
TreeLinkNode tmp = pNode.right;
while(tmp.left != null){
tmp = tmp.left;
}
return tmp;
}
//不存在右节点
else{
//根节点
if(pNode.next == null){
return null;
}else{//不是根节点
if(pNode.next.left == pNode){
return pNode.next;
}else{
//右节点关键代码(用两个指针判断拐弯)
TreeLinkNode tmp = pNode;
TreeLinkNode root = pNode;
while(root.next != null){
root = tmp.next;
if(root.left == tmp){
return root;
}
tmp = root;
}
}
}
}
return null;
}
}