数据结构 (六) 树和二叉树

这一章真滴是超级超级的难,本来递归就不会,现在又把指针和递归搞在一起,太难为人了,特别是二叉树那个地方,前序中序后序层序,非递归的方法实在是令人费解。
因此我的博客也只是罗列了一些主要的知识点,具体的知识还是要看课本的。

树的遍历:

树的前序遍历操作定义为:

若树为空,不进行遍历;否则

⑴ 访问根结点;

⑵ 按照从左到右的顺序前序遍历根结点的每一棵子树。

树的后序遍历操作定义为:

若树为空,则遍历结束;否则

⑴ 按照从左到右的顺序后序遍历根结点的每一棵子树;

⑵ 访问根结点。

树的层序遍历操作定义为:

从树的第一层(即根结点)开始,自上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。

树的存储结构:

双亲表示法

template

struct
PNode{

 T data;          //数据域

 int parent;   //指针域,双亲在数组中的下标

}
;

孩子表示法:

这 n 个单链表共有 n 个头指针,这 n 个头指针又组成了一个线性表。

为了便于进行查找采用顺序存储存储每个链表的头指针。

最后,将存放 n 个头指针的数组和存放n个结点的数组结合起来,构成孩子链表的表头数组。

11111

struct CTNode

{

 int child;

 CTNode *next;

};

template

struct CBNode

{

T data;

CTNode *firstchild;  

};

孩子兄弟表示法

template

struct TNode{

 T data;

 TNode <T> *firstchild, *rightsib;

};

2222

二叉树

完全二叉树的特点

叶子结点只能出现在最下两层,且最下层的叶子结点都集中在二叉树的左部;

完全二叉树中如果有度为1的结点,只可能有一个,且该结点只有左孩子。

  1. 深度为k的完全二叉树在k-1层上一定是满二叉树。

性质5-1 二叉树的第i层上最多有2i-1个结点(i≥1)。

性质5-2 一棵深度为k的二叉树中,最多有2k-1个结点,最少有k个结点。

深度为k且具有2k-1个结点的二叉树一定是满二叉树,

深度为k且具有k个结点的二叉树不一定是斜树。

性质5-3 在一棵二叉树中,如果叶子结点数为n0,度为2的结点数为n2,则有: n0=n2+1。 叶子结点n0=(n + 1)/2

性质5-4 具有n个结点的完全二叉树的深度为 log2n +1。

      2k-1 ≤ n

< 2k

性质5-5 对一棵具有n个结点的完全二叉树中从1开始按层序编号,则对于任意的序号为i(1≤i≤n)的结点(简称为结点i),有:

(1)如果i>1,

    则结点i的双亲结点的序号为  i/2;如果i=1,

    则结点i是根结点,无双亲结点。 

(2)如果2i≤n,

    则结点i的左孩子的序号为2i;

    如果2i>n,则结点i无左孩子。 

(3)如果2i+1≤n,

    则结点i的右孩子的序号为2i+1;如果2i+1>n,则结点 i无右孩子。 

在完全二叉树中,结点的层序编号反映了结点之间的逻辑关系。

1.二叉树第i层至多有2^(k-1)个结点(i>=1)。
2.深度为k的二叉树上,至多含2^k-1个结点(k>=1)
3.n0 = n2 + 1(度)
4.满二叉树:深度为k且含有2^k-1个结点的树。
5.完全二叉树:除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点。
(树中所含n个结点和满二叉树中编号为1至n的结点一一对应)。
6.具有n个结点的完全二叉树的深度为[log2n] + 1。
7.二叉树的链式存储表示:二叉链表、三叉链表(增加双亲指针域)、双亲链表、 线索链表。
8.二叉树的遍历:前、中、后。
9二叉树的遍历算法:递归、非递归(栈:现在经过不访问,一会访问的结点入栈,栈空结束遍历)。
10.二叉树递归遍历引申的算法:求树的深度、结点个数、复制二叉树等。
11.二叉树相关算法一定要考虑空树的情况。
13.表达式和二叉树的关系: [第一操作数][二元运算符][第二操作数] = [左节点][双亲结点][右结点],
(先中后)缀对应(前中后)遍历。
14.线索二叉树:二叉链表中增加两个标志域,让左右两个指针增加功能:有子结点则指向子结点,没有则指向前驱和后继(某种遍历方式)。
15.树和二叉树的相互转换,树的叶子结点:左子树空。 树、森林与二叉树的转换
16.遍历二叉树的所有叶子节点。
17.树的存储结构
18.哈夫曼树
19.平衡二叉树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值