二叉树
定义:二叉树是节点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的互不相交的二叉树组成。
-
顺序存储结构
定义:就是用一组连续的存储单元存放二叉树中的节点。
-
链式存储结构
(1)定义:用二叉链表来存储一颗二叉树,每个节点用一个链节点来存储。
|lchild |data |rchild |
|–|--|–|--|
data:存放数据;
lchild:左指针;
rchild:右指针;
(2)链表结构定义:typedef char TElemType;//元素数据类型 typedef struct node{ TElemType data;//数据域; struct node *lchild;//左指针域; struct node *rchild;//右指针域; }BTNode, *BInTree;//定义二叉树;
-
二叉树遍历
(1)先序遍历(根-左-右)
遍历结果:ABDEGCF
代码如下:void preorder(BTNode *p){ if(p!=NULL){ printf("%d",p->data);//访问根节点; preorder(p->lchild);//先序遍历左子树; preorder(p->rchild);//先序遍历右子树; } }
(2)中序遍历(左-根-右)
遍历结果:DBGEACF
代码如下:
void inorder(BTNode *p){
if(p!=NULL){
inorder(p->lchild);//先序遍历左子树;
printf("%d",p->data);//访问根节点;
inorder(p->rchild);//先序遍历右子树;
}
}
(3)后序遍历(左-右-根)
遍历结果:DGEBFCA
代码如下:
void postorder(BTNode *p){
if(p!=NULL){
postorder(p->lchild);//先序遍历左子树;
postorder(p->rchild);//先序遍历右子树;
printf("%d",p->data);//访问根节点;
}
}