每日算法 —— 计算机基础回炉系列

LeetCode每日一题 之 二叉树的下一个结点

2020-04-22  本文已影响0人  ZSACH

题目

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

我感觉可以自己先做做,你说呢!!!!!!

解题思路

先看一个颗二叉树


典型二叉树

中序遍历的顺序是左中右,这颗树的中序遍历是ACBDFHEMG

观察可得到,所给结点如果

举个栗子🌰

没有右子树可能不好理解,我们看下上面的树。D和G都没有右子树,D的下一个节点是F,而G没有下一个结点。可以看出一直往父节点寻找,找到一个所在枝干是左子树为之。例如B没有右子树,向上找,找到D,在D的左子树上,命中,下一个就是D。G没有右子树,向上找,找到E,在右子树,继续找,找到F,还在右子树,无法向上了,说明不存在下一个结点。D没有右子树,向上找,找到C,在右子树,继续找,找到F,在左子树,命中,返回F。

代码

public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        if(pNode.right != null){
            //有右子树,先右,再一直左
            pNode = pNode.right;
            while(pNode.left != null){
                pNode = pNode.left;
            }
            return pNode;
        } else {
            //没有右子树,向上找树枝所在左侧的结点
            while(pNode.next != null){
                if(pNode.next.left == pNode){return pNode.next;}
                pNode = pNode.next;
            }
        }
        return null;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读