美文网首页
剑指offer14

剑指offer14

作者: MonarchNie | 来源:发表于2019-07-08 11:32 被阅读0次

题目描述

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

解题思路分析

这道题如果能够很清楚的理解题意的话,其实不难做出的
首先,中序遍历下的下一个节点,那其实如果能够直接得到中序遍历之后的序列,是不是就可以直接拿到指定节点的下一个节点,但是啊,这个题目并没有给我们这颗二叉树的根节点,所有得到中序遍历的序列就变得不现实了,但其实并不影响。
中序遍历的下一个节点,咱们思考下,其实如果该节点有右孩子A的话,是不应该是该节点右子树中的最左的那个节点,或就是该节点的右孩子A
如果节点没有右孩子的话,那它的下一个节点肯定会在他的祖先节点,如果该节点是其父节点B的左孩子,那该节点的下一个节点就是其父节点B,如果是其右孩子的话,那么其实我们就是要一直顺着其祖先节点找下去,直到找到一个该节点的一个祖先节点C是这个祖先节点的父节点D的左孩子,然后这个父节点D就是我们要找的那个节点(有点绕,但是理解一下其实就很简单)

代码实现

public TreeLinkNode getInNext(TreeLinkNode pNode) {
    if (pNode == null) {
        return null;
    }
    //如果有右孩子,找到最左边的那个返回
    if (pNode.right != null) {
        return left(pNode.right);
    }
    //没有右孩子,开始顺着祖先节点往上找
    TreeLinkNode father = pNode.parent;
    //只要其父节点A一直是A的父节点的右孩子,就一直找下去
    while (father != null && pNode = father.right) {
        pNode = father;
        father = father.patent;
    }
    //直到找到一个左孩子的情况,就返回回来
    return father;
}

public TreeLinkNode left(TreeLinkNode node) {
    if (node.left == null) {
        return node;
    }
    return left(node.left);
}

相关文章

  • 剑指offer14

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结...

  • 剑指offer14 链表中倒数第k个结点

    题目: 思路: 1.先排除异常情况,当头结点等于空,即空链表;或者走0步、走负数步都毫无意义;以上情况都返回nul...

  • 剑指

    遥望中原九点烟,风云直上七重天。 今朝再向江湖去,一剑流星谁比肩? 2011.10(1488)

  • 剑指

    1. 二维数组中查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照...

  • 全网最全剑指offer题目解答

    【剑指offer】Java版代码(完整版) 【剑指offer】1-10题 【剑指offer】11-20题 【剑指o...

  • 剑指offer

    第一题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,...

  • 剑指BAT

    Android工作5年半了,一毕业就开始做这行。在现在这家公司工作了3年整,最近有换工作的打算,所以在猎聘...

  • 《剑指offer》

    4.调整数组顺序使奇数位于偶数前面 题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇...

  • 气剑指

    “聚气于指尖,凝其成剑,利可断金。”牢头对身边的狱卒说。 只见牢头举起的右手指尖逐渐变红,转而变白,隐隐发出音量很...

  • 剑指offer

    二维数组中查找数在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到...

网友评论

      本文标题:剑指offer14

      本文链接:https://www.haomeiwen.com/subject/kocohctx.html