剑指Offer57:二叉树的下一个结点(Java)

参考“小河沟大河沟”的牛客解答:https://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e?f=discussion

思路分析:

首先中序遍历的一个结点的下一个节点不可能在左子树上。
1.若有右子树则在右子树最左的结点;
2.若没有右子树,下一个节点是父节点且必须满足父节点是爷爷结点的左孩子,
若有父节点,但不满足父节点是爷爷结点的左孩子,则向上走(pNode=pNode.next),判断爷爷节点是否满足条件,直到满足条件或者没有父节点了,没有父结点返回null

题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

Java代码:

public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        if(pNode.right!=null){
            pNode=pNode.right;
            while(pNode.left!=null){
                pNode=pNode.left;
            }
            return pNode;
        }
        while(pNode.next!=null){
            if(pNode.next.left==pNode){
                return pNode.next;
            }
            pNode=pNode.next;
        }
        return null;
    }
}
原文地址:https://www.cnblogs.com/dongmm031/p/12322088.html