数据结构二叉树总结

第五章

什么是树?
n个节点的有限集。可以为空树。
什么是树的度?
对于树而言,每个节点均存在零个或多个分支,分支数称为一个节点的度,树中所有节点的度数之和 + 1 = 树的节点个数,加一是加根节点。树的度就是树中节点度数最大的节点的度。
树的高度、深度
高度,从下往上;深度,自上向下。
路径
自上向下,分支有向,双亲相同的两个分支节点不存在路径,两个分支上的节点都不存在到另一个分支节点的路径。

什么是二叉树?
二叉树也是一颗树,其特点是每个节点的度至多为2,并且二叉树是有序树。性质非空二叉树 n0 = n2 + 1。

满二叉树与完全二叉树
满二叉树,即二叉树的每一层都有2^(i - 1 )个节点,i为层数。完全二叉树,即除最后一层节点数可以不满,该层往上为一颗满二叉树。完全二叉树的叶节点只能出现在最下两层。

一颗有n个节点的二叉树树高
对于n个节点的二叉树来说,最小高度是完全二叉树,最大高度是一个节点一层,即高度最大为n。

二叉树的存储结构
顺序存储与链式存储。
顺序存储采用数组的方式存储,好处是可以通过下标确定节点之间的关系,但是对于节点数较少的树而言,采用顺序存储,存储密度小,耗费大量无用空间,空间利用率低。
链式存储,即采用列表存储。缺点是只能通过双亲节点的左右指针确定孩子节点。链式存储结构体如下:
typedef struct {
ElementType data;
struct *lchild,*rchild; //左右孩子指针
}

二叉树的遍历
先序,先访问根节点,再访问左节点,最后访问右节点。
需要采用栈结构。根据先序遍历,访问一个节点就输出节点的值,再把节点入栈,为啥入栈呢?因为先序访问的均为未被访问的最左端节点,如果最左端节点存在右孩子的话,在节点出栈时访问。
在这里插入图片描述
先根遍历上图
首先访问A节点,输出A节点的值,再把A节点入栈
访问A的左孩子B,输出B的值,入栈
访问B的左孩子D,输出D的值,入栈
D的左孩子为空,出栈访问右孩子
D的右孩子为空,再出栈B,访问B的右孩子,非空输出值,右孩子入栈,再访问其左右孩子
E的左右孩子空,出栈,再出栈
A的右孩子非空,输出值,入栈,访问左孩子空,再访问右孩子空,出栈。
遍历结束

中序,先访问最左节点,再访问其根节点,最后访问其右节点
后序,左->右->根

层次遍历,需要使用队列,为什么呢?
首先访问根节点,把根节点的左右孩子入队,然后出队并输出队头节点即左孩子,再把左孩子的左右孩子入队,然后出队根节点的右孩子并输出值,再把其左右孩子入队。
在这里插入图片描述
还有一个问题就是给定中序和其他任意一个序列画二叉树,这个问题不做赘述。

线索二叉树
https://blog.csdn.net/S_999999/article/details/86157532
二叉排序树
https://blog.csdn.net/yixianfeng41/article/details/52802855
平衡二叉树
https://blog.csdn.net/isunbin/article/details/81707606
哈夫曼树
http://c.biancheng.net/view/3398.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值