[树]二叉树的建立以及三种遍历
来源:互联网 发布:apache 双向认证 编辑:程序博客网 时间:2024/06/05 06:43
(上机练习)二叉树的建立以及三种遍历
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”)可以实现暂停显示和清屏功能,归属于头文件
0 0
- [树]二叉树的建立以及三种遍历
- 二叉树的建立以及三种遍历方式
- Java实现二叉树建立以及三种遍历
- Java实现二叉树的建立以及三种递归遍历
- C++二叉树的建立以及遍历
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)
- 二叉树的建立删除及三种遍历实现
- 二叉树的建立删除及三种遍历实现
- 数据结构 二叉树的建立及三种遍历方法
- 二叉树的建立,以及递归前中后序遍历二叉树
- 二叉树的递归建立以及深度优先遍历
- 数据结构二叉树的建立以及递归遍历
- 二叉树(二叉排序树)的建立以及遍历
- 【数据结构实验】二叉树的建立以及遍历
- 二叉树的建立以及先序中序后序递归遍历
- java实现二叉树的建立以及前序中序后序遍历
- 二叉树的建立以及遍历C/C++
- 二叉树的建立与存储,以及遍历方法
- UILable
- 字母表自定义控件的实现
- android动画 属性动画详解
- Ubuntu Server 14.04.3 LTS 安装C/C++开发环境时遇到的依赖关系问题
- 第十四周项目2----分块查找算法
- [树]二叉树的建立以及三种遍历
- 期末总结
- 触发器 triggers
- 黑马程序员——异常
- 魔王语言解释(数组实现栈和队列)
- 成员变量和局部变量
- Java中equals和==的区别
- BZOJ-1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法+乱搞
- php用isset()判断变量是否定义的存在的坑