#include "stdio.h"

typedef struct BiTNode{
    char data;   /*结点的数据域*/
    struct BiTNode *lchild , *rchild;  /*指向左孩子和右孩子*/
} BiTNode , *BiTree;

/*创建一棵二叉树*/
void CreatBiTree(BiTree *T){
    char c;
    scanf("%c",&c);
    if(c == ' ') *T = NULL;
    else{
       *T = (BiTNode * )malloc(sizeof(BiTNode));  /*创建根结点*/
        (*T)->data = c;    /*向根结点中输入数据*/
        CreatBiTree(&((*T)->lchild));  /*递归地创建左子树*/
        CreatBiTree(&((*T)->rchild));  /*递归地创建右子树*/
    }
}

/*遍历二叉树*/
void PreOrderTraverse(BiTree T ){
    if(T){   /*递归结束条件,T为空*/
        printf("%3c",T->data);  /*访问根结点,将根结点内容输出*/
        PreOrderTraverse(T->lchild);  /*先序遍历T的左子树*/
        PreOrderTraverse(T->rchild);  /*先序遍历T的右子数*/
    }
}

void InOrderTraverse(BiTree T){
    if(T){   /*如果二叉树为空,递归遍历结束*/
        InOrderTraverse(T->lchild);  /*中序遍历T的左子树*/ 
        printf("%3c",T->data);       /*访问根结点*/
        InOrderTraverse(T->rchild);  /*中序遍历T的右子数*/
    }
}

void PosOrderTraverse(BiTree T){
    if(T){   /*如果二叉树为空,递归遍历结束*/
        PosOrderTraverse(T->lchild);  /*后序遍历T的左子树*/ 
        PosOrderTraverse(T->rchild);  /*后序遍历T的右子数*/
        printf("%3c",T->data);        /*访问根结点*/
    }
}

main()
{
   BiTree T = NULL;  /*最开始T指向空*/
   printf("Input some characters to create a binary tree\n");
   CreatBiTree(&T);  /*创建二叉树*/
   printf("The squence of preorder traversaling binary tree\n");
   PreOrderTraverse(T); /*先序遍历二叉树*/
   printf("\nThe squence of inorder traversaling binary tree\n");
   InOrderTraverse(T);  /*中序遍历二叉树*/
   printf("\nThe squence of posorder traversaling binary tree\n");
   PosOrderTraverse(T); /*后序遍历二叉树*/
   getchar();
   getchar();
}

编程实现二叉树的遍历相关推荐

  1. 【编程】二叉树的先序、中序、后序遍历

    二叉树的遍历主要有三种: 先序遍历(根左右) 中序遍历(左根右) 后序遍历(左右根) 举个例子: 先(根)序遍历(根左右):A B D H E I C F J K G 中(根)序遍历(左根右):D H ...

  2. java数据结构二叉树遍历_java数据结构 之 二叉树的遍历(1)

    树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合 节点:上图的圆圈,比如A,B,C等都是表示 ...

  3. 第五期 C/C++数据结构 二叉树的遍历以及结点数、深度

    代码详见后面 实验三 树和二叉树 一.实验目的 1.使学生熟练掌握二叉树的逻辑结构和存储结构(重点). 2.熟练掌握二叉树的各种遍历算法(难点). 二.实验原理及说明 1. 前序遍历算法思想: (1) ...

  4. Python实现: 常用排序算法 二叉树的遍历算法

    转载自:http://www.cnblogs.com/alex3714/articles/5474411.html点击打开链接,感谢原作者,如有侵权,联系删除 本节内容 算法定义 时间复杂度 空间复杂 ...

  5. 二叉树的遍历(c语言数据结构实验报告三)

    二叉树的遍历 一.实验目的或任务 二.实验教学基本要求 三.实验教学的内容或要求 1. 编写函数,输入字符序列,建立二叉树的二叉链表 2. 编写函数,实现二叉树的中序递归遍历算法. 3. 编写函数,实 ...

  6. 二叉树的遍历(递归与非递归)

    class Node: # 定义树节点def __init__(self, value, left=None, right=None): # 节点的值及左子树.右子树self.value = valu ...

  7. 刷题:二叉树的遍历方式及根据遍历结果还原二叉树

    二叉树的遍历方式及根据遍历结果还原二叉树 1. 二叉树的遍历方式 2. 根据遍历结果还原二叉树 2.1 已知先序遍历和中序遍历还原二叉树 2.2 已知后序遍历和中序遍历还原二叉树 实验代码: 1. 二 ...

  8. 后序遍历的非递归算法python_刷题系列 - Python用非递归实现二叉树后续遍历

    顺便把Python用非递归实现二叉树后续遍历也写了. 其实前序中序和后续都是针对父节点说的.比如下面这个最简单二叉树. 前序就是ABC,父节点A在前 中序就是BAC,父节点A在中间 后序就是BCA,父 ...

  9. 二叉树 1.0 -- 创建二叉树、遍历二叉树、二叉树常见问题求解

    树的结构主要是为了查找,这个主要是为了搜索,树的结构关注的不是增删查改 树 广义上面的树的结构我们不知道树的一个节点是有几个子节点的,所以这个时候我们需要定义的一种结构就是,一个节点的孩子是可以动态的 ...

  10. PTA数据结构与算法题目集 6-9 二叉树的遍历

    PTA数据结构与算法题目集(中文) 6-9 二叉树的遍历 void InorderTraversal( BinTree BT ){if(BT==NULL)return;if(BT->Left){ ...

最新文章

  1. C++逻辑运算符与逻辑表达式
  2. NLP(4) | 用词向量技术简单分析红楼梦人物关系用n-gramma生成词向量word2vect进行模型训练
  3. “金星生命论”乌龙事件新进展:那只是二氧化硫而已
  4. java 泛型 t_Kotlin(2) 泛型与集合
  5. Acwing第 36 场周赛【完结】
  6. HBase总结(二十)HBase常用shell命令详细说明
  7. 利用Python自动发送电子邮件
  8. 产品经理思维模型:创新价值曲线
  9. linux sz到指定的机器,linux 机器之间 zssh, rz, sz互相传输讲解
  10. extjs $ 美元符号修改
  11. 使用CLion在Gtkmm中加载glade文件时的相对路径问题
  12. linux 统计端口链接,linux netstat 统计链接数查看外部(转)
  13. 3.9-分区表fstab
  14. java list 分组_Java8 快速实现List转map 、分组、过滤等操作
  15. 2018-2019-1 20165307 20165327 20165332 实验二 固件程序设计
  16. 微信公众号是html页面吗,微信公众号网页开发
  17. ViewPage2和Fragment以及Tablayout使用
  18. hikari yml文件配置
  19. 自定义tensorflow的tf.image.resize_bicubic方法
  20. 公主同盟第3关(GBA)(难) 奥兰多西部

热门文章

  1. 小猿圈之Python开发的技巧一?
  2. Slowquery图形化显示MySQL慢日志工具
  3. Java线程唤醒与阻塞的定义与使用方法
  4. SQL Server 创建游标(cursor)
  5. log4j.xml配置示例
  6. Js获取处理日期时间
  7. Lucene2.4.0一般查询结果过滤与排行
  8. java找链表中最小值_算法图解:如何找出栈中的最小值?
  9. 【HDU1665】That Nice Euler Circuit(欧拉公式+点在线段上判断(不在端点)+线段规范相交)
  10. mysql5.5 mysqldump_mysql5.5mysqldump原文翻译_MySQL