博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树先序遍历(递归算法)
阅读量:4139 次
发布时间:2019-05-25

本文共 1905 字,大约阅读时间需要 6 分钟。

/**********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;

转载地址:http://ocmvi.baihongyu.com/

你可能感兴趣的文章
hdu 3789 hdoj 3789
查看>>
hdu 3788 hdoj 3788
查看>>
zju 1003 zoj 1003
查看>>
zju 1004 zoj 1004
查看>>
zju 1005 zoj 1005
查看>>
zju 1006 zoj 1006
查看>>
【虚拟机】虚拟化架构与系统部署(Windows系统安装)
查看>>
字节跳动安卓开发实习生面试分享
查看>>
好书分享之——《能力陷进》
查看>>
阅读笔记《c++ primer》
查看>>
阅读笔记《C++标准程序库》
查看>>
基于mirror driver的windows屏幕录像
查看>>
C语言8
查看>>
Qt实现简单延时
查看>>
qml有关矩形说明
查看>>
在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
查看>>
repeater的使用
查看>>
qt msvc编译中文乱码解决
查看>>
qt实现点击出现窗口,点击其他任何地方窗口消失
查看>>
QML DropArea拖拉文件事件
查看>>