数据结构二叉树之闲死攻略(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wydyd110/article/details/82969287

这是一篇闲狗都能看懂的二叉树教程,因为是闲狗写的。

目录

1 二叉树的概念

1.1 二叉树是what?

1.2 二叉树的五种基本形态

1.3 二叉树的相关术语

1.4 完美二叉树(Perfect Binary Tree)

1.5 满二叉树(Full Binary Tree)

1.6 完全二叉树(Complete Binary Tree)

1.7 扩充二叉树Extended binary tree

1.8 二叉树的主要性质

2 二叉树的遍历(周游traversal)

2.1 深度优先遍历二叉树

2.1.1 前序法 (preorder traversal,根左右)

2.1.2 中序法 (inorder traversal,左根右)

2.1.3 后序法 (postorder traversal,左右根)

2.2 宽度优先遍历二叉树——层序遍历

2.3 应用

3 二叉树的存储结构

3.1 二叉链表

3.2 三叉链表


1 二叉树的概念

1.1 二叉树是what?

二叉树:每个结点至多拥有两棵子树(即不存在度大于2的结点)

二叉树的子树有左右之分,其次序不能任意颠倒

1.2 二叉树的五种基本形态

1.3 二叉树的相关术语


上图的叶子结点:B,F,G,H,I

上图的分支结点:A,C,D,E

1.4 完美二叉树(Perfect Binary Tree)

A Perfect Binary Tree(PBT) is a tree with all leaf nodes(译成结点而非节点) at the same depth. 
All internal nodes have degree 2.

1.5 满二叉树(Full Binary Tree)

A Full Binary Tree (FBT) is a tree in which every node other than the leaves has two children.
所有非叶子结点的度都是2

1.6 完全二叉树(Complete Binary Tree)

A Complete Binary Tree (CBT) is a binary tree in which every level, except possibly the last, is completely filled, and all nodes are as far left as possible.
完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。

1.7 扩充二叉树Extended binary tree

所有空子树,都增加空树叶
外部路径长度 E 和内部路径长度 I,满足:E = I + 2n (n 是内部结点个数)

E = 2 + 3 * 2 + 4 * 4 + 5 * 8 = 64

I = 1 * 2 + 2 * 3 + 3 * 4 + 4 * 4 = 36

E = I + 2n = 36 + 2 * 14 = 64

1.8 二叉树的主要性质

性质1. 在二叉树中,第i层上最多有 2i 个结点(i≥0)


性质2. 深度为 k 的二叉树至多有 2k+1-1个结点(k≥0),其中深度(depth)定义为二叉树中层数最大的叶结点的层数


性质3. 一棵二叉树,若其终端结点数为 n0,度为2的结点数为 n2, 则 n0=n2+1


性质4. 满二叉树定理:非空满二叉树树叶数目等于其分支结点数加1

树叶数目5(BFGHI) = 分支结点数4((ACDE) + 1

性质5. 满二叉树定理推论:一个非空二叉树的空子树数目等于其结点数加1

长方形结点的数目 = 圆形结点数目 + 1


累了累了,看下小姐姐轻松一下

2 二叉树的遍历(周游traversal)

2.1 深度优先遍历二叉树

2.1.1 前序法 (preorder traversal,根左右)

遍历过程为:
访问根结点
先序遍历其左子树
先序遍历其右子树
A(B D F E )(C G H I)
先序遍历=> A B D F E C G H I

(1)递归实现

(2)非递归实现

使用堆栈

  • 遇到一个结点,就访问该结点,并把此结点的非空右结点推入栈中,然后下降去遍历它的左子树;
  • 遍历完左子树后,从栈顶托出一个结点,并按照它的右链接指示的地址再去遍历该结点的右子树结构。

入栈序列 C F I H

先序序列 A(C入栈) B(F入栈) D F(F出栈) E C(C出栈,I入栈) G(H入栈) H(H出栈) I(I出栈)

2.1.2 中序法 (inorder traversal,左根右)

遍历过程为:

中序遍历其左子树
访问根结点
中序遍历其右子树
(D B E F) A (G H C I)
中序遍历=> D B E F A G H C I

(1)递归实现

(2)非递归实现

入栈序列 A B D F E C G H I

2.1.3 后序法 (postorder traversal,左右根)

遍历过程为:

(D E F B )( H G I C) A
后序遍历=> D E F B H G I C A

(1)递归实现

2.2 宽度优先遍历二叉树——层序遍历

2.3 应用

3 二叉树的存储结构

二叉树的各结点随机地存储在内存空间中,结点之间的逻辑关系用指针来链接。

3.1 二叉链表

3.2 三叉链表

博文短才会有人看的,下面转至《数据结构二叉树之闲死攻略(二)》

其实,不管长还是短都没人看你的。


本文参考自:

张铭《数据结构与算法》

程杰《大话数据结构》

陈越,何钦铭《数据结构》

《完美二叉树, 完全二叉树和完满二叉树

猜你喜欢

转载自blog.csdn.net/wydyd110/article/details/82969287
今日推荐