二叉树——二叉树的遍历
来源:互联网 发布:淘宝品牌男装店 编辑:程序博客网 时间:2024/06/07 03:30
本题要求给定二叉树的4种遍历。
函数接口定义:
void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );void LevelorderTraversal( BinTree BT );
其中BinTree
结构定义如下:
typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};
要求4个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符。
裁判测试程序样例:
#include <stdio.h>#include <stdlib.h>typedef char ElementType;typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};BinTree CreatBinTree(); /* 实现细节忽略 */void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );void LevelorderTraversal( BinTree BT );int main(){ BinTree BT = CreatBinTree(); printf("Inorder:"); InorderTraversal(BT); printf("\n"); printf("Preorder:"); PreorderTraversal(BT); printf("\n"); printf("Postorder:"); PostorderTraversal(BT); printf("\n"); printf("Levelorder:"); LevelorderTraversal(BT); printf("\n"); return 0;}/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
Inorder: D B E F A G H C IPreorder: A B D F E C G H IPostorder: D E F B H G I C ALevelorder: A B C D F G I E H
int GetHeight(BinTree BT)//求二叉树高度、深度{ int m = 0,n = 0; if(BT == NULL) { return 0; } else { m = GetHeight(BT -> Left); n = GetHeight(BT -> Right); if(m > n) return m + 1; return n + 1; }}void InorderTraversal(BinTree BT)//中序遍历{ if(BT) { InorderTraversal(BT -> Left); printf(" %c",BT -> Data); InorderTraversal(BT -> Right); }}void PreorderTraversal(BinTree BT)//先序遍历{ if(BT) { printf(" %c",BT -> Data); PreorderTraversal(BT -> Left); PreorderTraversal(BT -> Right); }}void PostorderTraversal(BinTree BT)//后序遍历{ if(BT) { PostorderTraversal(BT -> Left); PostorderTraversal(BT ->Right); printf(" %c",BT -> Data); }}//数组模拟队列void LevelorderTraversal(BinTree BT)//层次遍历非递归写法{ if(BT) { BinTree T[100]; BinTree tmp; int i = 0,j; T[j++] = BT; while(i<j) { tmp = T[i++];//队头出队 printf(" %c",tmp -> Data); if(tmp->Left)//若左子树非空 { T[j++] = tmp -> Left; } if(tmp -> Right)//右子树非空 { T[j++] = tmp -> Right; } } }}//递归写法void PrintLevel(BinTree BT,int level){ if(!BT) return ;//空树 if(level == 1) { printf(" %c",BT -> Data); } PrintLevel(BT -> Left, level - 1); PrintLevel(BT -> Right,level - 1);}void LevelorderTraversal(BinTree BT){ if(!BT) return ; int height = GetHeight(BT); for(int i = 1; i <= height; i++) { PrintLevel(BT,i); }}
阅读全文
0 0
- 二叉树的应用—二叉树遍历的应用
- 二叉树——二叉树的遍历
- 二叉树——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- LeetCode—二叉树遍历的情况
- LeetCode—二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 数据结构实验之排序四:寻找大富翁
- 隐马尔科夫模型——基本概念
- 一篇杂记
- 服务端I/O性能大比拼:Node、PHP、Java、Go
- Mysql 主从复制配置以及相关的操作
- 二叉树——二叉树的遍历
- Struts2的简单搭建(三)
- 李白打酒!
- 2017年浙江中医药大学大学生程序设计竞赛
- 实现希尔排序算法。
- Android中获取TextView和EditText中的文本
- 幻方代码
- JAVA中数字与字母的转换(简单总结)
- java详解 --- Map接口