数据结构 第五章 树-二叉树及线索化

【二叉树】

二叉树 = 度为2的有序树,空树也是一种二叉树/ 一个结点(根结点)也是一种二叉树。

性质:

1. 叶子结点的树 = 度为2 的结点 + 1, 即  N(Leaf) = N(node2) + 1

推导过程:

N(all) =N(node2)+ N(node1) + N(Leaf) 

N(all) =2N(node2)+ N(node1) + 1  

==>   N(Leaf) = N(node2) + 1

2. K层最多有 2个结点 

 

 【二叉树的存储】

顺序存储: 结构体数组的形式存储,适合 满二叉树 、完全二叉树。主要看结点结构体如何定义了。

链式存储:结构体指针链放入形式存储

各自优缺点:参照 线性表 章节

 

 

【二叉树的遍历】

 根据父结点的访问序列,分为4种:

1)先序遍历\先根遍历\前序遍历,1 访问 根结点,2 访问左子树上的结点,左子树上的结点访问完成后,3 访问右子树上的结点。

打印结果: A B D E C F

流程图如下:

 

 

 

 

2)中序遍历\中根遍历,1 访问左子树上的结点,左子树上的结点访问完成后,2 访问 根结点,3 访问右子树上的结点。

打印结果: D B E A F C 

流程图如下:

 

 

 

3)后序遍历\后根遍历,1 访问左子树上的结点,左子树上的结点访问完成后,2 访问右子树上的结点,3 访问 根结点。

打印结果: D E B F C A

流程图如下:

 

总结,树的深度遍历,可以使用递归,也可以使用栈+循环 来实现。

 4) 层次遍历:

从二叉树的第一层(根节点)开始,从上至下逐层遍历,在同一层中,则按照从左到右的顺序对节点逐个访问。在逐层遍历过程中,按从顶层到底层的次序访问树中元素,在同一层中,从左到右进行访问。

层次遍历流程图如下:

 

 

 

【线索二叉树】

 在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化。

 树线索化后,使得树有了 前驱 后继结点,树线性化了。

 

ltag: 0 pleft 指向左孩子结点, 1 pleft 指向其  前驱 结点

rtag: 0 pright 指向右孩子结点, 1 pright指向其  后继 结点

根据二叉树的遍历顺序生成不同的线索二叉树,分为 先序、 中序、 后序   线索二叉树。

如下图:

 

先序线索化二叉树 创建流程:

 

 

  

 中序线索化,后序线索化流程,参照 中序、后序遍历 + 上图红框部分。

 

posted @ 2021-03-01 18:53  雪域蓝心  阅读(196)  评论(0编辑  收藏  举报