zoukankan      html  css  js  c++  java
  • 二叉树进阶应用之查找结点的后继结点

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

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

        一:前继结点与后继结点

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    eclipse常用快捷键大全 (转)
    介绍 JSON (转)
    坐标转换原理
    直接线性变换解法(DLT)用于标定相机
    SuperMap(无对应字段)空间属性挂接
    Ubuntu16.04安装视觉SLAM环境(DBow3)
    Ubuntu16.04安装视觉SLAM环境(OpenCV)
    Oracle数据库学习(三):Oracle数据库的环境配置与安装
    Oracle数据库学习(四):学习中的遇到的问题
    Oracle数据库学习(一):虚拟机下Oracle Linux的安装与配置
  • 原文地址:https://www.cnblogs.com/ygj0930/p/6612987.html
Copyright © 2011-2022 走看看