剑指offer--二叉树的下一个结点(Java)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40244153/article/details/87934581

题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。
思路:
  首先自己在草稿纸上画图,进行分析(不再展开)。可以发现下一个结点的规律为:
  1.若当前结点有右子树时,其下一个结点为右子树中最左子结点;
  2.若当前结点无右子树时,
    (1)若当前结点为其父结点的左子结点时,其下一个结点为其父结点;
    (2)若当前结点为其父结点的右子结点时,继续向上遍历父结点的父结点,直到找到一个结点是其父结点的左子结点(与(1)中判断相同),该结点即为下一结点。

考点:数据结构-树

public TreeLinkNode GetNext(TreeLinkNode pNode) {
        if (pNode == null ) return null;
        if(pNode.right!=null){
            pNode = pNode.right;
            while(pNode.left!=null){
                pNode = pNode.left;
            }
            return pNode;
        }
        while(pNode.next!=null){
            if(pNode == pNode.next.left) {
                return pNode.next;
            }else{
                pNode = pNode.next;
            }
        }
        return null;
    }

收获:

  1.在面对复杂问题时要学会画图和举例分析
  2.在分情况讨论时,一定要考虑到所有情况,这些都是在写代码前需要考虑到的。

猜你喜欢

转载自blog.csdn.net/weixin_40244153/article/details/87934581