二叉树
1. 树的基础知识
树型结构 是一种非线性的数据结构,是以分支关系定义的层次结构。根节点 :没有前驱树应该用节点 2度 :有2个分支,依次类推树的度 = Max{度}节点层次 :根在第1层,根的孩子在第2层,类推。树的深度 = Max{层次}森林 :互不相交树的集合叶子节点 :度为零的节点
2. 树的表示方法
3. 什么是二叉树
每个节点至多只有两课子树(不存在度大于2的节点)。 二叉树的子树有左右之分,其次序不能任意颠倒。
3.1 二叉树的分类
3.2 二叉树的性质
在二叉树的第 i 层 至多有 2 的 i-1 次方个节点(i>=1) 深度为 k 的二叉树至多有 2 的 k 次方减 1 个节点n0 = n2 + 1
求证: n0 = n2 + 1
证明:
n = n0 + n1 + n2
设 B 为二叉树的分支树
n = B + 1
B = n1 + 2 n2
所以:n = n1 + 2 n2 + 1
得:n0 = n2 + 1
满二叉树 :每一层节点数都达到最大,不存在只有左节点。(一颗深度为 k 且有 2 的 k 次方减 1 个节点的二叉树)。完全二叉树 :有右节点,则必有左节点。(若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。)分支数 = 节点数 - 1
4. C语言下的二叉树的创建
4.1 二叉树的二叉链表存储
typedef struct BiTNode {
int data;
struct BiTNode * lchild, * rchild;
} BiTNode, * BiTree;
4.2 创建二叉树
void CreateBiTree ( BiTree & T) {
T = ( BiTree) malloc ( sizeof ( BiTNode) ) ;
int data;
scanf ( "%d" , & data) ;
if ( data == - 1 ) T = NULL ;
if ( T) {
T-> data = data;
printf ( "输入%d节点的左子节点:\n" , data) ;
CreateBiTree ( T-> lchild) ;
printf ( "输入%d节点的右子节点:\n" , data) ;
CreateBiTree ( T-> rchild) ;
}
}
4.3 例子
4.4 运行视图
5. Java语言下的二叉树的创建
5.1 构造根节点
int data;
BinaryTree lchild;
BinaryTree rchild;
BinaryTree ( int elem) {
data = elem;
lchild = null;
rchild = null;
}
5.2 构建二叉树
public BinaryTree createBinaryTree ( ) {
BinaryTree root = new BinaryTree ( 1 ) ;
BinaryTree T_l = new BinaryTree ( 2 ) ;
BinaryTree T_r = new BinaryTree ( 3 ) ;
BinaryTree T_l_l = new BinaryTree ( 4 ) ;
BinaryTree T_r_r = new BinaryTree ( 5 ) ;
root. lchild = T_l;
root. rchild = T_r;
T_l. lchild = T_l_l;
T_r. lchild = T_r_r;
return root;
}
5.3 源码
package datastructure. binarytree;
public class BinaryTree {
int data;
BinaryTree lchild;
BinaryTree rchild;
BinaryTree ( int elem) {
data = elem;
lchild = null;
rchild = null;
}
public BinaryTree createBinaryTree ( ) {
BinaryTree root = new BinaryTree ( 1 ) ;
BinaryTree T_l = new BinaryTree ( 2 ) ;
BinaryTree T_r = new BinaryTree ( 3 ) ;
BinaryTree T_l_l = new BinaryTree ( 4 ) ;
BinaryTree T_r_r = new BinaryTree ( 5 ) ;
root. lchild = T_l;
root. rchild = T_r;
T_l. lchild = T_l_l;
T_r. lchild = T_r_r;
return root;
}
}