二 二叉树
二叉树的存储
顺序存储
链式存储
二叉树的定义
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
二叉树的遍历
先序遍历
//先序遍历
int preTree(BiTree T){
if(T==NULL) return 0;
else{
printf("%d ",T->data);
preTree(T->lchild);
preTree(T->rchild);
}
return 1;
}
中序遍历
//中序遍历
int inTree(BiTree T){
if(T==NULL)return 0;
else{
inTree(T->lchild);
printf("%d ",T->data);
inTree(T->rchild);
}
}
后序遍历
//后序遍历
int postTree(BiTree T){
if(T==NULL)return 0;
else{
postTree(T->lchild);
postTree(T->rchild);
printf("%d ",T->data);
}
}
例题解析
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree createTree(){
BiTree T;
int data;
scanf("%d",&data);
if(data==-1)return 0;
else{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=data;
printf("请输入%d左子树的值:",data);
T->lchild=createTree();
printf("请输入%d右子树的值:",data);
T->rchild=createTree();
return T;
}
}
//先序遍历
int preTree(BiTree T){
if(T==NULL) return 0;
else{
printf("%d ",T->data);
preTree(T->lchild);
preTree(T->rchild);
}
return 1;
}
//中序遍历
int inTree(BiTree T){
if(T==NULL)return 0;
else{
inTree(T->lchild);
printf("%d ",T->data);
inTree(T->rchild);
}
}
//后序遍历
int postTree(BiTree T){
if(T==NULL)return 0;
else{
postTree(T->lchild);
postTree(T->rchild);
printf("%d ",T->data);
}
}
int main(){
BiTree S;
printf("输入第一个结点的数据");
S=createTree();
preTree(S);
printf("\n");
inTree(S);
printf("\n");
postTree(S);
return 0;
}
运行结果