题目描述

  给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。

思路分析

  1. 链表的结构中 有指向父结点的指针,方法输入为二叉树的头结点
  2. 分为两种情况:
    • 若当前结点有右子树时,它中序遍历的下一个结点为 它的右子树中的最左子结点;
    • 若当前结点没有右子树时:
      • 该结点是它父结点的左子结点,那么它的下一个结点即它的父节点;
      • 该结点是它父结点的右子结点,那么他的下一个结点就需要沿着它的父节点链进行搜寻,如果搜寻到 一个结点是它父结点的左子结点(复现第一种情况),是那么下一个结点即为此结点的父结点。

Java代码

public static TreeNodeWithParent GetNext(TreeNodeWithParent tree) {
        return Solution1(tree);
    }

    /**
     * 
     * @param tree
     * @return
     */
    private static TreeNodeWithParent Solution1(TreeNodeWithParent tree) {
        if (tree == null) {
            return null;
        }
        TreeNodeWithParent p = tree;

        if (p.right != null) {
            p = p.right;
            while (p.left != null) {
                p = p.left;
            }
            return p;
        }
        while (p.parent != null) {
            if (p == p.parent.left) {
                return p.parent;
            }
            p = p.parent;
        }
        return null;
    }

代码链接

剑指Offer代码-Java

相关文章:

  • 2022-12-23
  • 2021-09-15
  • 2021-06-05
  • 2021-08-22
  • 2021-06-25
  • 2022-12-23
  • 2022-02-07
猜你喜欢
  • 2021-09-29
  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
  • 2021-12-29
  • 2021-07-10
相关资源
相似解决方案