分类: C/C++
2008-09-19 21:09:00
/**********1 先序遍历生成二叉树
2 单个生结点生成二叉树
3 求二叉树叶结点和
4 求二叉树树高
#include
#include
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;
}