题解 | #二叉树的下一个结点#
二叉树的下一个结点
https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e
import java.util.*;
/*
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){
pNode=pNode.right;
while(pNode.left!=null){
pNode=pNode.left;
}
return pNode;
}
//若没有右子树
//且是父亲的左孩子,则直接返回父亲节点
if(pNode.next!=null&&pNode.next.left==pNode){
return pNode.next;
}
//若没有右子树
//且是父亲的右孩子,则一直向上找到上级是上上级的左孩子,返回上上级
if(pNode.next!=null){
pNode=pNode.next;
//要是是右孩子还得往上找
while(pNode.next!=null&&pNode.next.right==pNode){
pNode=pNode.next;
}
return pNode.next;
}
return null;
}
}
