• 二叉树进阶应用之查找结点的后继结点


        一般我们讨论的二叉树的结点结构只有:结点值、左儿子、右儿子。

        但是如果在结点结构中加一个成员属性,指向结点的父节点。那么又会引出不少的变化。

        一:前继结点与后继结点

        与链表不同,链表的前继后继就是根据结点在链表中的位置的前一结点、后一结点得出的。但是树不同,结点的上一层与下一层都含有较多的结点,所以不能单纯地由上下层关系定义前继结点与后继结点。

        我们说的二叉树结点的前继结点、后继结点是:在中序遍历这棵二叉树的结果中,该结点的前一结点是它的前继结点、后一结点是后继结点。

        二:给出某一结点node,求node的后继结点(该树的结点包含父节点指针)【注:该题没有给出树的root结点】

        传统解法:由node的父节点不断往上,找到root结点,然后从root开始中序遍历树得到中序遍历结果,则中序遍历结果中node的后面一个结点就是后继结点。

        优化解法:从中序遍历的特性去寻找:左-根-右

                     中序遍历一个结点时,下一个结点有三种情况:1:如果当前结点有右结点,则下一个遍历的是右子树的最左结点

                                                                                2:如果当前结点无右结点,若它是父节点的左儿子,则下一遍历的是父节点

                                                                                3:如果当前结点无右结点,且它是父节点的右儿子,则所在子树遍历完了。向上寻找一个作为左儿子的祖先结点,那么下一遍历的就是该祖先结点的父节点;(一直找到根节点为止)

                                                                                如果上面三种情况都没找到,则该节点是树的最后一个结点,无后继结点。

  • 相关阅读:
    ES6解构赋值
    ES6中的Symbol类型
    两个列表合并成字典
    python关于列表转为字典的两个小方法
    break、continue和return的使用
    进度条的实现
    md5加密
    dict字典方法
    用户相关的文件、解析以及命令的使用
    linux的根目录
  • 原文地址:https://www.cnblogs.com/ygj0930/p/6612987.html
Copyright © 2020-2023  润新知