二叉树是一种递归形式的双链表,二叉树的实现主要是利用双重递归的调用来创建左子树和右子树的。二叉树的遍历分为三种方式:一种是先序遍历,即根左右。另一种是中序遍历,即左根右。最后一种是后序遍历,即左右根。本文是以先序的方式创建的二叉树。二叉树的递归形式代码如下:

#include <iostream>#include <stdio.h>#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop *///定义树的结构typedef struct BiTNode{    char data;//数据域     struct BiTNode *lchild,*rchild;//左结点和右节点 }BiTNode,*BiTree;//创建二叉树,利用先序递归的方式(根左右) BiTree CreateBiTree(BiTree &T){    char x;    scanf("%c",&x);    if(x=='#'){        return T=NULL;    }else{        T = (BiTNode*)malloc(sizeof(BiTNode));//创建结点        T->data = x;        T->lchild = CreateBiTree(T->lchild);//创建左子树        T->rchild = CreateBiTree(T->rchild);//创建右子树         return T;       }}//遍历二叉树(先序遍历)void  preTree(BiTree T){//T始终指向的是根结点,然后通过根结点依次链接     if(T!=NULL){        printf("%c\t",T->data);        preTree(T->lchild);        preTree(T->rchild);    }}//遍历二叉树(中序遍历)void  inTree(BiTree T){//T始终指向的是根结点,然后通过根结点依次链接     if(T!=NULL){        inTree(T->lchild);        printf("%c\t",T->data);        inTree(T->rchild);    }}//遍历二叉树(后序遍历)void  finishTree(BiTree T){//T始终指向的是根结点,然后通过根结点依次链接     if(T!=NULL){        finishTree(T->lchild);        finishTree(T->rchild);        printf("%c\t",T->data);    }}//二叉树结点总数int Count(BiTree T){    if(T==NULL){//空二叉树结点数为0        return 0;    }else{//左右子树结点总数加1        return Count(T->lchild)+Count(T->rchild)+1;    }}//叶子数 int LeafCount(BiTree T){    if(T == NULL){        return 0;    }else if((T->lchild==NULL) && (T->rchild==NULL)){        return 1;    }else{        return LeafCount(T->lchild)+LeafCount(T->rchild);    }}//统计叶子结点 int Leaf(BiTree T){    int LeafCount = 0;    if(T!=NULL)    {        Leaf(T->lchild);        Leaf(T->rchild);        if(T->lchild==NULL && T->rchild==NULL)        {            LeafCount++;   //统计叶子结点数目        }    }    return LeafCount;} int main(int argc, char** argv) {    BiTree T;    printf("请输入创建结点的观察值:\n");    CreateBiTree(T);    printf("创建成功!\n");    printf("先序遍历:\n");    preTree(T);    printf("\n中序遍历:\n");    inTree(T);    printf("\n后序遍历:\n");    finishTree(T);    printf("\n二叉树结点总数:\n");    Count(T);    printf("二叉树叶子结点总数:\n");    LeafCount(T);    Leaf(T);    return 0;}
©著作权归作者所有:来自51CTO博客作者Vitamin_轩辰的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 万字长文!剑指offer全题解思路汇总
  2. Android(安卓)Ormlite 学习笔记2 -- 主外键关系
  3. android 日常迭代与维护总结一
  4. android Map遍历的四种方式
  5. Android(安卓)遍历Hashmap里面的key 和value
  6. Android初级教程获取手机系统联系人信息
  7. Android(安卓)获取调用接口的包名
  8. Android(安卓)下拉刷新,上拉加载动画,这一个就够了
  9. android sdcard read-only file system 的解决办法

随机推荐

  1. Navicat工具备份还原mysql数据库详细图解
  2. navicat for mysql 连接报错1251详细解决
  3. Mysql基础之字符集与乱码
  4. Sqoop_详细总结 使用Sqoop将HDFS/Hive/HB
  5. 不知道有人在mysql5.0上 针对10亿条数据
  6. mysql中的隐式提交
  7. MYSQL在触发器中怎样实现‘根据条件来确
  8. MySQL“在建立到SQL Server的连接时发生
  9. mysql has gone away 的问题解决 --- ODB
  10. PHP MYSQL无法在While或For循环中获取数