1.什么是二叉树?二叉树是结点的有限集合,他或是空集,或者有一个根及两棵不相交的称为这个根的左右子树的二叉树组成。
2.设T是由n个结点构成的二叉树,其中叶节点个数为n0,次数为2的结点个数为n2,则n0=n2+1。
3.满二叉树
4.完全二叉树,一棵包含n个结点高度为k的二叉树T,当按层次顺序编号T的所有结点,对应于一颗高度为k的满二叉树中编号由1至n的那些结点时,T被称为完全二叉树。
5.二叉树的存储:顺序存储与链接存储。
tips:顺序存储一般用于完全二叉树或者近似完全二叉树时使用。
链接存储的结点基本模型:left+data+right,即左儿子加数据加右儿子。此外,还有三叉链表的模型,left+parent+data+right,增加了一个parent指针用于寻找父亲。
6.二叉树的遍历:分为四种方式遍历,即层次遍历。
代码如下:
void Traverse(Tree* root){//先根序
if(root){
printf("%d",root->data);
Traverse(root->left);
Traverse(root->right);
}
}
void Traverse(Tree* root){//中根序
if(root){
Traverse(root->left);
printf("%d",root->data);
Traverse(root->right);
}
}
void Traverse(Tree* root){//后根序
if(root){
Traverse(root->left);
printf("%d",root->data);
Traverse(root->right);
}
}
关于层次遍历代码与非递归遍历见后一篇文章。