二叉树 前序 后继 怎么理解
来源:互联网 发布:ubuntu移除文件 编辑:程序博客网 时间:2024/04/28 22:22
进来学习二叉树,在插入删除时对二叉树的前序后继,自我感觉有点绕,让人摸不着头脑,百度后,竟没有发现一篇讲解怎么理解二叉树的前序与后继,于是自己研究起来。
1.二叉树前序与后继的一个判断分割点是(以中序前序为例子),就是这个节点(这个节点设为N)有没有可能是这个二叉树中最后一个访问的节点(要注意一定只要考虑以这个节点为头的情况如下)
L与R并不是只是一个节点而是代表左右子树
那么N是有可能成为第一个节点的(中序),就是当L为空时,那么if(左子树为空)就是一个条件
下面分为
if(左树为空)
{
}
else
{
}
当左子树为空时,那么它的后继不在这棵树内,我们就要上溯(往上找),在这补充一下,不管是先序 中序 还是后序 每一个树都会先遍历完再会上溯,
所以我们开始往上找 ,设它的第一个节点为F,不要管N是F的左子树,还是右子树。
上溯是把他与父节点看做是一个树,那么下面就要看这棵树是否有可能第一个访问的节点是我们那个节点,下面我们要考虑以N为头的这棵树作为以F为头的树的子树,有没有可能在以F为头的
树中是先访问的,把以N为头的子树看做整体,不用关心内部,因为上面的假设已经保证只要先访问以N为头的树,就一定会先访问N节点,因为L为空,(L不为空的情况在if(左树不为空里考虑))
下面就有分情况了如果以N为头的子树是F的左子树,那么按照中序,以N为头的数就会先访问,若是F的右子树,那么F节点就是前驱,若为左子树,那么把按照之前的方法吧以F为头的子树看做一个整体
再向上走一层。因为N的左子树为空,且N为F的左子树,那么若访问F这棵树一定先访问N节点,所以可以看做一个整体。
最后这样上溯,只要这个整体是某个节点的右子树就终止了,所以现在可以写程序了。
if(N的左子树不为空)
{
那么遍历左子树的最后一个节点就是前驱
}
else
{
if(N为F左子树)
{
F节点就是前驱
}
else
{
找到右父节点
}
}
0 0
- 二叉树 前序 后继 怎么理解
- 二叉树中的前趋和后继
- 二叉树后继
- 二叉树前驱后继的查找(这个容易理解)
- 给出二叉树,将二叉树进行中序线索化,在根据中序线索化二叉树,找出给定节点的前序后继节点,和给出节点的后序后继节点
- 二叉查找树的后继
- 二叉树的后继结点
- 二叉搜索树建立、插入、删除、前继节点、后继节点之c++实现
- 二叉树寻找中序遍历的后继节点
- 二叉树 —— 中序遍历结点的后继
- 算法导论-二叉树删除 前驱 后继
- 二叉线索树,寻找前驱与后继
- 二叉树的前驱和后继
- 二叉树遍历的前驱和后继
- 求二叉查找树指定节点后继
- 二叉搜索树之前驱后继
- 关于二叉查找树中的某个节点的前趋和后继的算法(Python实现)
- 【二叉树】寻找一个二叉树的节点在中序遍历中的后继节点
- codeforces-#479A. Expression
- 讨厌的最大矩形
- c++和c中的函数相互调用
- 黑马程序员————交通灯
- 软件架构
- 二叉树 前序 后继 怎么理解
- 51nod-1102 . 面积最大的矩形&&hdu-1506
- 采用UML视图方法进行软件架构设计
- redis之Hash存储与String存储内存消耗对比
- Ubuntu14.04 静态编译安装Qt4.8.6
- 科学的编程-the science of programming
- Hello World
- Java笔记——接口
- 博客开通了,感谢CSDN,以后都会一直在这里,感谢所有人的支持与鼓励