您的位置:首页 > 其它

二叉树先序遍历(递归算法)

2007-06-10 16:00 323 查看
/**********1 先序遍历生成二叉树
2 单个生结点生成二叉树
3 求二叉树叶结点和
4 求二叉树树高

#include<stdio.h>
#include<malloc.h>

typedef struct BiTnode{
int data;
struct BiTnode *lchild;
struct BiTnode *rchild;
}BiTnode,*BiTree;

void CreateBiTree(BiTree &T)
{//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,
//构造二叉链表表示的二叉树T
int ch =0;
scanf("%d",&ch);
if(ch == 8) T = NULL; //当输入数字8时表示子树为空
else {
if(!(T = (BiTnode *)malloc(sizeof(BiTnode)))) return;
T->data = ch; //生成根结点
CreateBiTree(T->lchild); //构造左子树
CreateBiTree(T->rchild); //构造右子树
}
}

/*(创建二叉树)

void CreateBiTree(BiTree &T)
{//单个生成结点并赋值
printf("输入7个树结点的值:");
T=(BiTree)malloc(sizeof(BiTnode));
BiTree p1=T;
BiTree p2=(BiTree)malloc(sizeof(BiTnode));
BiTree p3=(BiTree)malloc(sizeof(BiTnode));
BiTree p4=(BiTree)malloc(sizeof(BiTnode));
BiTree p5=(BiTree)malloc(sizeof(BiTnode));
BiTree p6=(BiTree)malloc(sizeof(BiTnode));
BiTree p7=(BiTree)malloc(sizeof(BiTnode));

scanf("%d",&p1->data);p1->lchild = p2; p1->rchild = p6;
scanf("%d",&p2->data);p2->lchild = p3; p2->rchild = p5;
scanf("%d",&p3->data);p3->lchild = p4; p3->rchild = NULL;
scanf("%d",&p4->data);p4->lchild = NULL; p4->rchild = NULL;
scanf("%d",&p5->data);p5->lchild = NULL; p5->rchild = NULL;
scanf("%d",&p6->data);p6->lchild = NULL; p6->rchild = p7;
scanf("%d",&p7->data);p7->lchild = NULL; p7->rchild =NULL;
}

*/

void DLR(BiTree T)
{//递归先序遍历二叉树
if(!T)
return;
else
{
printf("%d ",T->data); //根结点
DLR(T->lchild); //左子树
DLR(T->rchild); //右子树
}
}

int SumYe(BiTree T)
{//求二叉树叶结点数之和
if(!T) return 0;
if(!T->lchild && !T->rchild ) return 1;
return SumYe(T->lchild)+SumYe(T->rchild);
}

int HightTree(BiTree T)
{//求二叉树高
int hl = 0;//记录左子树高
int hr = 0;//记录右子树高
if(!T) return 0;
hl = HightTree(T->lchild);
hr = HightTree(T->rchild);
return (hl>hr) ? hl+1 : hr+1 ;
}

int main(void)
{
int a = 0;//记录二叉树叶结点数之和
int b = 0;//记录二叉树树高
BiTree T;
printf("输入二叉树的值:");
CreateBiTree(T);
DLR(T);
a=SumYe(T);
b=HightTree(T);
printf("/n%d %d",a,b);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: