4-9 二叉树的遍历 (25分)(前、中、后、层次)
2016-11-02 22:30
204 查看
本题要求给定二叉树的4种遍历。
函数接口定义:
其中BinTree结构定义如下:
要求4个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符。
裁判测试程序样例:
输出样例(对于图中给出的树):
Inorder: D B E F A G H C I
Preorder: A B D F E C G H I
Postorder: D E F B H G I C A
Levelorder: A B C D F G I E H
———-通过代码
函数接口定义:
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 I
Preorder: A B D F E C G H I
Postorder: D E F B H G I C A
Levelorder: A B C D F G I E H
———-通过代码
void InorderTraversal( BinTree BT ) { if(BT == NULL){ return ; } InorderTraversal(BT->Left); printf(" %c",BT->Data); InorderTraversal(BT->Right); } void PreorderTraversal( BinTree BT ) { if(BT == NULL){ return ; } printf(" %c",BT->Data); PreorderTraversal(BT->Left); PreorderTraversal(BT->Right); } void PostorderTraversal( BinTree BT ) { if(BT == NULL){ return ; } PostorderTraversal(BT->Left); PostorderTraversal(BT->Right); printf(" %c",BT->Data); } void LevelorderTraversal( BinTree BT ) { int maxsize = 10; int front,rear; BinTree queue[maxsize]; //注意存的是指向结点的指针,而不是结点值; front = rear = 0; BinTree temp; //存放临时结点指针; if(BT != NULL){ //这里必须加if判断,否则PAT编译器老是报段错误,满分25分扣两分 //根结点入队 rear = (rear+1)%maxsize; queue[rear] = BT; //队不空循环 while(front != rear){ //队结点出队 front = (front+1)%maxsize;//注意队列出队入队,都是一样的:都是先移动指针,再动队元素,与栈不同,要区分 temp = queue[front]; printf(" %c",temp->Data); //出队的结点的左右结点入队 if(temp->Left){ rear = (rear+1)%maxsize; queue[rear] = temp->Left; } if(temp->Right){ rear = (rear+1)%maxsize; queue[rear] = temp->Right; } } } }
相关文章推荐
- PTA 6-2 二叉树的遍历(25 分) 25分代码 (数组实现层次遍历)
- 二叉树的层次遍历
- [编程之美]二叉树的层次遍历
- 第十一周实践项目1--二叉树的层次遍历算法
- 第十一周项目1-二叉树的层次遍历(2)
- 二叉树:前序、中序、后序、层次遍历及实现
- LintCode-二叉树的层次遍历 II
- LeetCode OJ 之 Binary Tree Level Order Traversal II (二叉树的层次遍历-二)
- 层次遍历二叉树—vector的彪悍与神秘
- 二叉树的递归遍历,非递归遍历,层次遍历.
- python二叉树的层次遍历
- 二叉树的层次遍历
- 按层次遍历二叉树
- C++二叉树的构建及求深度,叶子数量,层次遍历
- 二叉树的层次遍历
- java根据层次遍历建立二叉树
- 层次遍历二叉树
- 二叉树之层次遍历(js)
- 二叉树的中序遍历、递归实现、非递归实现、层次遍历、二叉树的应用,来来来,都有都有
- 二叉树---层次遍历