第六章 树和二叉树
画图、编程
二叉树、哈夫曼树、最小生成树
知识点
-
掌握二叉树的基本概念、性质和存储结构
-
二叉树的定义
-
二叉树(Binary Tree)是n(n≥0)个结点所构成的集合,它或为空树(n = 0),或为非空树,对于非空树T:
-
有且仅有一个称之为根的结点;
-
除根结点以外的其余结点分为两个互不相交的子集T1和T2,分别称为T的左子树和右子树,且T1和T2本身又都是二叉树。
-
-
-
二叉树的基本特点
-
结点的度小于等于2
-
有序树(子树有序,不能颠倒)
- 二叉树的性质
-
性质1: 在二叉树的第i层上至多有2^(i-1)个结点
-
性质2: 深度为k的二叉树至多有2^(k)-1个结点
-
性质3: 对于任何一棵二叉树,若2度的结点数有n2个,则叶子数n0必定为n2+1 (即n0=n2+1)
-
性质4: 具有n个结点的完全二叉树的深度必为[log2n]+1
-
性质5: 对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i,其右孩子编号必为2i+1;其双亲的编号必为i/2。
-
二叉树的的存储结构
- 顺序存储
按满二叉树的结点层次编号,依次存放二叉树中的数据元素。
特点:
结点间关系蕴含在其存储位置中
浪费空间,适于存满二叉树和完全二叉树- 链式存储
typedef struct BiNode{ TElemType data; struct BiNode *lchild,*rchild; //左右孩子指针 }BiNode,*BiTree;
-
-
熟练掌握二叉树的前、中、后序遍历方法
Status PreOrderTraverse(BiTree T){ if(T==NULL) return OK; //空二叉树 else{ cout<<T->data; //访问根结点 PreOrderTraverse(T