Chinaunix首页 | 论坛 | 博客
  • 博客访问: 234571
  • 博文数量: 68
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 612
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-04 22:38
文章分类

全部博文(68)

文章存档

2010年(2)

2009年(12)

2008年(54)

我的朋友

分类: 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;

阅读(839) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~