4-9 二叉树的遍历 (25分)

4-9 二叉树的遍历   (25分)

输出样例(对于图中给出的树):

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

代码:(都是遍历的算法)

 1 //  4-9 二叉树的遍历
 2 //
 3 //  Created by Haoyu Guo on 04/02/2017.
 4 //  Copyright ? 2017 Haoyu Guo. All rights reserved.
 5 //
 6 #include <stdio.h>
 7 #include<iostream>
 8 #include <stdlib.h>
 9 #define OVERFLOW -2
10 using namespace std;
11 typedef char ElementType;
12 typedef struct TNode *Position;
13 typedef Position BinTree;
14 struct TNode{
15     ElementType Data;
16     BinTree Left;
17     BinTree Right;
18 };
19
20 int CreatBinTree(BinTree &T)//创建二叉树
21 {
22     char ch;//按先序的方式输入
23     cin >> ch;
24     if (ch == ‘#‘)  T=NULL;
25     else {
26         if (!(T = (BinTree)malloc(sizeof(TNode)))) exit(OVERFLOW);
27         T->Data = ch;
28         CreatBinTree(T->Left);
29         CreatBinTree(T->Right);
30     }
31     return 0;
32 }
33 void InorderTraversal( BinTree BT );
34 void PreorderTraversal( BinTree BT );
35 void PostorderTraversal( BinTree BT );
36 void LevelorderTraversal( BinTree BT );
37
38 int main()
39 {
40     BinTree BT;
41     CreatBinTree(BT);
42     printf("Inorder:");    InorderTraversal(BT);    printf("\n");
43     printf("Preorder:");   PreorderTraversal(BT);   printf("\n");
44     printf("Postorder:");  PostorderTraversal(BT);  printf("\n");
45     printf("Levelorder:"); LevelorderTraversal(BT); printf("\n");
46     return 0;
47 }
48 /* 你的代码将被嵌在这里 */
49 void InorderTraversal( BinTree BT )//中根遍历
50 {
51     if(BT==NULL)
52         return;
53     else
54     {
55         InorderTraversal(BT->Left);
56         printf(" %c",BT->Data);
57         InorderTraversal(BT->Right);
58     }
59 }
60 void PreorderTraversal( BinTree BT )//先序遍历
61 {
62     if(BT==NULL) return;
63     else{
64         printf(" %c",BT->Data);
65         PreorderTraversal(BT->Left);
66         PreorderTraversal(BT->Right);
67     }
68 }
69
70 void PostorderTraversal( BinTree BT )//后序遍历
71 {
72     if(BT==NULL) return;
73     else{
74         PostorderTraversal(BT->Left);
75         PostorderTraversal(BT->Right);
76          printf(" %c",BT->Data);
77     }
78 }
79 void LevelorderTraversal( BinTree BT )//层序遍历
80 {
81     if(BT==NULL) return;
82     else{
83         BinTree q[100];
84         BinTree p;
85         int head=0,tail=0;
86         if(!BT) return;
87         if(BT){
88             q[tail++]=BT;
89             while(tail!=head){
90                 p=q[head++];
91                 printf(" %c",p->Data);
92                 if(p->Left)     q[tail++]=p->Left;
93                 if(p->Right)    q[tail++]=p->Right;
94             }
95         }
96
97     }
98 }
时间: 2024-10-09 00:02:48

4-9 二叉树的遍历 (25分)的相关文章

数据结构与算法题目集(中文) 6-9 二叉树的遍历 (25分)

1 // #include <stdio.h> 2 // #include <stdlib.h> 3 4 // typedef char ElementType; 5 // typedef struct TNode *Position; 6 // typedef Position BinTree; 7 // struct TNode{ 8 // ElementType Data; 9 // BinTree Left; 10 // BinTree Right; 11 // }; 12

基础实验4-2.3 二叉树的非递归遍历 (25分)

本题要求用非递归的方法实现对给定二叉树的 3 种遍历. 函数接口定义: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderTraversal( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType

javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作

树型结构是一类非常重要的非线性结构.直观地,树型结构是以分支关系定义的层次结构. 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构:在数据库系统中,可用树来组织信息:在分析算法的行为时,可用树来描述其执行过程等等. 下面讲解的内容完整代码在这:https://github.com/LukeLin/data-structure-with-js/blob/master/Binary%20tree/BinaryTree.js 首先看看树的一些概念: 1.树(Tree)是n

PTA 根据后序和中序遍历输出先序遍历(25 分)

7-1 根据后序和中序遍历输出先序遍历(25 分) 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果. 输入格式: 第一行给出正整数N(≤30),是树中结点的个数.随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔.题目保证输入正确对应一棵二叉树. 输出格式: 在一行中输出Preorder:以及该树的先序遍历结果.数字间有1个空格,行末不得有多余空格. 输入样例: 7 2 3 1 5 7 6 4 1 2 3 4 5 6 7 输出样例: Pre

1102 Invert a Binary Tree (25 分)dfs+层序+中序+后序遍历

1102 Invert a Binary Tree (25 分) The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote (Homebrew), but you can't invert a binary tree on a whiteboard so fuck off. Now it's your turn to prove that YOU CAN i

PAT 甲级 1013 Battle Over Cities (25 分)(图的遍历,统计强连通分量个数,bfs,一遍就ac啦)

1013 Battle Over Cities (25 分) It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if we need to repair any oth

PAT 甲级 1040 Longest Symmetric String (25 分)(字符串最长对称字串,遍历)

1040 Longest Symmetric String (25 分) Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given Is PAT&TAP symmetric?, the longest symmetric sub-string is s PAT&TAP s, hence you must output 11. In

5-24 树种统计 (25分)

5-24 树种统计   (25分) 随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类.请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比. 输入格式: 输入首先给出正整数N(\le 10^5≤10?5??),随后N行,每行给出卫星观测到的一棵树的种类名称.种类名称由不超过30个英文字母和空格组成(大小写不区分). 输出格式: 按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位. 输入样例: 29 Red Alder Ash Aspe

二叉树的遍历--非递归实现

leetcode中有这么一道题,非递归来实现二叉树的遍历. 二叉树的后序遍历顺序为,root->left, root->right, root,因此需要保存根节点的状态.显然使用栈来模拟递归的过程,但是难点是怎么从root->right转换到root. 方法1: 对于节点p可以分情况讨论 1. p如果是叶子节点,直接输出 2. p如果有孩子,且孩子没有被访问过,则按照右孩子,左孩子的顺序依次入栈 3. p如果有孩子,而且孩子都已经访问过,则访问p节点 如何来表示出p的孩是否都已经访问过了