NOJ1018-深度遍历二叉树

题目要求很简单,前中后序遍历一棵二叉树。坑爹的是这道题的输入数据和测试数据压根不一样,找了好久原因,去讨论区看见有别人发的测试样例,修改了一下就AC了

测试样例是这个:DEH##FJ##G#CK###A#B##

 1 #include <cstdio>
 2
 3 typedef char TElemType;
 4
 5 typedef struct node {
 6     TElemType data;
 7     struct node *left_child;
 8     struct node *right_child;
 9 } BTNode, *BinTree;
10
11 //TElemType ch[] = { ‘A‘, ‘B‘, ‘#‘, ‘D‘, ‘#‘, ‘#‘, ‘C‘, ‘E‘, ‘#‘, ‘#‘, ‘F‘, ‘#‘, ‘#‘ };
12 //DEH##FJ##G#CK###A#B##
13 TElemType ch[] = { ‘D‘, ‘E‘, ‘H‘, ‘#‘, ‘#‘, ‘F‘, ‘J‘, ‘#‘, ‘#‘, ‘G‘, ‘#‘, ‘C‘, ‘K‘, ‘#‘, ‘#‘, ‘#‘, ‘A‘, ‘#‘, ‘B‘, ‘#‘, ‘#‘ };
14 int count = 0;
15
16 void Create( BTNode*& t ) {
17     char c;
18     c = ch[count++];
19     if( c ==‘#‘ )
20         t = NULL;
21     else {
22         t = new BTNode;
23         t->data = c;
24         Create( t->left_child );
25         Create( t->right_child );
26     }
27 }
28
29 void PreOrder( BTNode* t ) {
30     if( t != NULL ) {
31         printf( " %c", t->data );
32         PreOrder( t->left_child );
33         PreOrder( t->right_child );
34     }
35 }
36
37 void InOrder( BTNode *t ) {
38     if( t != NULL ) {
39         InOrder( t->left_child );
40         printf( " %c", t->data );
41         InOrder( t->right_child );
42     }
43 }
44
45 void PostOrder( BTNode *t ) {
46     if( t != NULL ) {
47         PostOrder( t->left_child );
48         PostOrder( t->right_child );
49         printf( " %c", t->data );
50     }
51 }
52
53 int main() {
54     BTNode T;
55     BinTree root = &T;
56     Create( root );
57     printf( "PreOrder:" );
58     PreOrder( root );
59     printf( "\n" );
60     printf( "InOrder:" );
61     InOrder( root );
62     printf( "\n" );
63     printf( "PostOrder:" );
64     PostOrder( root );
65     return 0;
66 }
时间: 2024-08-05 02:36:17

NOJ1018-深度遍历二叉树的相关文章

一步一步写算法(之二叉树深度遍历)

原文:一步一步写算法(之二叉树深度遍历) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 深度遍历是软件开发中经常遇到的遍历方法.常用的遍历方法主要有下面三种:(1)前序遍历:(2)中序遍历:(3)后序遍历.按照递归的方法,这三种遍历的方法其实都不困难,前序遍历就是根-左-右,中序遍历就是左-根-右,后续遍历就是左-右-根.代码实现起来也不复杂. 1)前序遍历 void preorder_traverse(TREE_NODE* pTree

【数据结构与算法】二叉树深度遍历(递归)

二叉树的深度遍历用递归的话就没有什么好说的了. 代码实现 /** * 源码名称:TreeIteratorRecursion.java * 日期:2014-08-23 * 程序功能:二叉树深度遍历 * 版权:[email protected] * 作者:A2BGeek */ public class TreeIteratorRecursion { class TreeNode<T> { private T mNodeData; private TreeNode<T> mLeftChi

【数据结构与算法】二叉树深度遍历(非递归)

据说这个笔试面试的时候非常easy考到,所以写到这里. 图示 代码实现 /** * 源代码名称:TreeIteratorNoRecursion.java * 日期:2014-08-23 * 程序功能:二叉树深度遍历(非递归) * 版权:[email protected] * 作者:A2BGeek */ import java.util.Stack; public class TreeIteratorNoRecursion { class TreeNode<T> { private T mNod

Java 实现深度遍历和广度遍历数及其应用

一.深度遍历和广度遍历原理及实现 1.深度优先 英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.对于上面的例子来说深度优先遍历的结果就是:A,B,D,E,I,C,F,G,H.(假设先走子节点的的左侧). 深度优先遍历各个节点,需要使用到堆(Stack)这种数据结构.stack的特点是是先进后出.整个遍历过程如下: 首先将A节点压入堆中,stack(A); 将A节点弹出,同时将A的子节点C,B压入堆中,此

[广度遍历和深度遍历]聊聊算法和设计模式

晚上无聊写了个二叉树(图)的广度和深度遍历算法,算法本身很简单,但是如何做到通用呢,一下代码是我的设计,请大家帮忙看看有什么问题,我自己感觉有问题就是不知道具体什么问题 public interface IGraph<TVertex> { IEnumerable<IEdge<TVertex>> Edges { get; } } public interface IEdge<TVertex> { TVertex From { get; set; } TVert

二叉树 二叉树的性质 存储结构 遍历二叉树 C实现二叉树的创建和遍历 线索二叉树

定义 二叉树(binary tree)是n(n>=0)个结点的有限集合,该集合为空集合称为空二叉树,或者有一个根结点和两棵互不相交的,分别称为树根结点的左孩子树和右孩子树组成. 二叉树的特点 每个结点最多有两棵子树,所以二叉树总没有度大于2的结点 左子树和右子树是有顺序的,次数不能任意颠倒 即使树中某结点只有一棵子树,也要区分是左子树还是右子树 特殊的二叉树 1. 斜树 所有的结点都只有左子树的二叉树称为左斜树; 所有的结点都只有右子树的二叉树称为右斜树; 这两者统称为斜树 2. 满二叉树 在一

【数据结构】二叉树链式结构--遍历二叉树

树是n(n>=0)个结点的有限集. 在任一颗非空数中: 1)有且仅有一个根节点 2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合也是一颗树,并且成为根的子树. 二叉树:n个结点的有限集合,该集合或者为空集(空),或者由一个根节点和两棵互不相交的.分别称为根结点的左子树和右子树的二叉树组成. 二叉树每个结点最多有两个孩子,所以为它设计一个数据域和两个指针域,我们称这样的链表为二叉链表. 代码: #include "string.h" #inc

层次遍历二叉树

层次遍历二叉树,编程之美上看过解法,然后在练习了一下.用递归和vector,队列实现了,然后加上了测试函数,测试函数的二叉树创建方法待改进. //有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树. //给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列.保证结点数小于等于500. #include <iostream> using namespace std; #include <vecto

【TOJ 1224】数据结构练习题――后序遍历二叉树

Description 给定一颗二叉树,要求输出二叉树的深度以及后序遍历二叉树得到的序列.本题假设二叉树的结点数不超过1000. Input 输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树.每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理.二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替). Output 输出每棵二叉树的深度以及后序遍历二叉树得到

遍历二叉树的三种方法

朋友面试遇到一道笔试题:写出递归遍历二叉树的代码(先序.中序.后序遍历都可以)? 首先要知道二叉树是什么,它的数据结构是怎样的? 如何实现这种二叉树?采用匿名内部类的形式实现 class Node{ //节点数据 private T data; //可比较的泛型 //左子树 private Node leftChildTree; //右子树 private Node rightChildTree; public Node(T data){ this.data = data; } } 知道它的数据