一、基本概念

节点的度:一个节点含有的子树的个数称为该节点的度;
叶节点或终端节点:度为0的节点称为叶节点;
非终端节点或分支节点:度不为0的节点;
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
兄弟节点:具有相同父节点的节点互称为兄弟节点;
树的度:一棵树中,最大的节点的度称为树的度;
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次;
堂兄弟节点:双亲在同一层的节点互为堂兄弟;
节点的祖先:从根到该节点所经分支上的所有节点;
子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
森林:由m(m>=0)棵互不相交的树的集合称为森林;

二. 、树的存储结构

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 );

}

}
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值