[树]二叉树的建立以及三种遍历
2015-12-19 19:10
477 查看
(上机练习)二叉树的建立以及三种遍历
1. 目的
设计数据结构和算法,实现按层次构造二叉树的算法掌握树的前根序、中根序和后根序遍历算法
2. 内容
按层次(从上到下,从左到右的顺序)输入树的结点,如果该结点为空,则用一个特定的值替代(比如0或者.)。要求构造一棵如下的二叉树,当二叉树构造成功后,需要对其进行先序遍历,后序遍历,中序遍历。3. 思路
用链式存储方式,存储二叉树T,并对其用递归方式,用三种方式遍历。4. 主要函数
void InitBiTree(BiTree &T)
初始化树T,将头节点置空
void CreatBiTree(BiTree &T)
构造二叉树,按先序次序次序输入节点值,^表示空树
void PreOrderTraverse(BiTree &T)
先序遍历二叉树
void InOrderTraverse(BiTree &T)
中序遍历二叉树
void PostOrderTraverse(BiTree &T)
后序遍历二叉树
void Interface()
打印交互界面
5. 代码
#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct BiTNode { char data; BiTNode *lchild, *rchild; }BiTNode, *BiTree; void InitBiTree(BiTree &T) { T = NULL; } void CreatBiTree(BiTree &T) //按先序次序次序输入节点值,^表示空树 { char c; getchar(); scanf("%c", &c); if(c == '^') T = NULL; else { if(!(T = (BiTNode *)malloc(sizeof(BiTNode)))) exit(0); else T -> data = c; printf("请输入%c的左孩子:\n", c); CreatBiTree(T -> lchild); printf("请输入%c的右孩子:\n", c); CreatBiTree(T -> rchild); } } void PreOrderTraverse(BiTree &T) { if(T == NULL) return; else { printf("%c", T -> data); PreOrderTraverse(T -> lchild); PreOrderTraverse(T -> rchild); } } void InOrderTraverse(BiTree &T) { if(T == NULL) return; else { InOrderTraverse(T -> lchild); printf("%c", T -> data); InOrderTraverse(T -> rchild); } } void PostOrderTraverse(BiTree &T) { if(T == NULL) return; else { PostOrderTraverse(T -> lchild); PostOrderTraverse(T -> rchild); printf("%c", T -> data); } } void Interface() { printf(" 二叉树 \n"); printf("====================================\n"); printf(" 1.建立二叉树 \n"); printf(" 2.先序遍历 \n"); printf(" 3.中序遍历 \n"); printf(" 4.后序遍历 \n"); printf(" 0.退出 \n"); printf("====================================\n"); } int main() { int n, a = 1; BiTree T; InitBiTree(T); while(a) { Interface(); scanf("%d", &n); switch(n) { case 1: printf("请按先序输入二叉树:\n"); printf("请输入根节点:\n"); CreatBiTree(T); printf("二叉树建立成功\n"); break; case 2: PreOrderTraverse(T); break; case 3: InOrderTraverse(T); break; case 4: PostOrderTraverse(T); break; case 0: return 0; default: printf("输入错误\n"); break; } system("pause"); system("cls"); } return 0; }
5. 运行结果
以先序遍历顺序为bac的二叉树为例6. 收获总结
malloc函数返回值为void*, 使用时要强制转换system(“pause”)以及system(“cls”)可以实现暂停显示和清屏功能,归属于头文件
相关文章推荐
- 字母表自定义控件的实现
- android动画 属性动画详解
- Ubuntu Server 14.04.3 LTS 安装C/C++开发环境时遇到的依赖关系问题
- Java基础--集合框架(HashSet、TreeSet、泛型)
- UILable
- JS回调函数
- BestCoder Round #66 1002
- 基于UDP协议的”hello world“
- 02成绩排序.jiudu
- Windows7下配置Emacs+Cedet+Ecb插件
- Android开发中使用WebView视图显示网页的注意点
- 移植mbed到目标板
- 给jdk写注释系列之jdk1.6容器(5)-LinkedHashMap源码解析
- 两种方法把10进制转化为16进制查表法第二种
- PAT乙级 人口普查(20)
- 装饰模式
- ScrollView中页面显示自动滑到最后问题的解决
- tomcat7 内存配置修改方法
- 开发至今,终于开始测试bug,可以省心点了
- No OraCM running