一、基本概念
二. 、树的存储结构
1.顺序存储结构——双亲表示法
struct node{
ElementType data;
int parent;
}
2.链式存储结构
(1)多重链表结构
定长结点的多重链表:每个结点指针域的个数等于树的度数。
不定长结点的多重链表:每个结点指针域的个数等于该结点的度数。
(2)三重链表结构
一个值域,三个指针域:第一个指向第1棵子树,第二个指向双亲结点,第三个指向右边第1个兄弟结点。
(3)孩子链表结构
一个值域,一个指针域:指向下一个孩子结点。
(4)双亲孩子结构
两个值域:第一个保存本身数据信息,第二个保存该结点双亲结点在数组中的下标;一个指针域:指向孩子结点。
(5)孩子兄弟表示法
一个值域,两个指针域:第一个指向该结点的第一个孩子结点,第二个指向下一个兄弟结点。
三、二叉树
(1)二叉树的性质
1、二叉树上第i层上至多有2的i-1次方个结点
2、深度为h的二叉树至多有2的h次方-1个结点
3、对任意一颗二叉树,如果其叶节点数为n0,度为2的结点数为n2,则n0=n2+1。
(2)二叉树的存储结构
1、顺序存储结构
2、链式存储结构:一个值域,两个指针域:一个指向左孩子结点,一个指向右孩子结点。
四、二叉树的遍历
1、前序遍历:根节点->左子树->右子树
2、中序遍历:左子树->根节点->右子树
3、后序遍历:左子树->右子树->根节点
4、按层次遍历
递归:
void preOrder(TNode *tree){
if(tree != NULL){
Access(tree->data);//访问根结点
preOrder(tree->Lsubtree);//访问左子树
preOrder(tree->Rsubtree);//访问右子树
}
}
五、一些算法
(1)求二叉树高度(深度)
int high(TNode *tree){
if(tree == NULL){
return 0;
}else{
return(max(high(tree->左子树), high(tree->右子树)) +1 );
}
}