二叉树的建立与遍历(山东理工OJ)
题目描写叙述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(当中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
输入
输入一个长度小于50个字符的字符串。
输出
输出共同拥有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
第3行输出叶子节点个数;
第4行输出二叉树深度。
演示样例输入
abc,,de,g,,f,,,
演示样例输出
cbegdfa
cgefdba
3
5
#include <iostream>
using namespace std;
typedef char Elem_Type;
typedef struct BiTNode
{
Elem_Type data;
BiTNode *lchild;
BiTNode *rchild;
}BiTNode;
void CreateBiTree(BiTNode **root)
{
Elem_Type temp;
cin>>temp;
if(temp == ',')
*root = NULL;
else
{
*root = new BiTNode;
(*root)->data = temp;
CreateBiTree( &(*root)->lchild );
CreateBiTree( &(*root)->rchild );
}
}
void InOrderTraverse(BiTNode *root)//中
{
if( root )
{
InOrderTraverse( root->lchild);
cout<<root->data;
InOrderTraverse( root->rchild);
}
}
void PostOrderTraverse(BiTNode *root)
{
if( root )
{
PostOrderTraverse( root->lchild);
PostOrderTraverse( root->rchild);
cout<<root->data;
}
}
int LeafNodes( BiTNode *root)
{
static int count =0;
if( !root )
return 0;
if( !root->lchild && !root->rchild)
count++;
LeafNodes(root->lchild);
LeafNodes(root->rchild);
return count;
}
int BiTreeDepth(BiTNode *root)
{
if( !root )
return 0;
return (BiTreeDepth(root->lchild) > BiTreeDepth(root->rchild)?
BiTreeDepth(root->lchild) : BiTreeDepth(root->rchild)) + 1;
}
int main(void)
{
BiTNode *root = NULL;
CreateBiTree(&root);
InOrderTraverse(root);
cout<<endl;
PostOrderTraverse(root);
cout<<endl;
cout<<LeafNodes( root)<<endl;
cout<<BiTreeDepth(root)<<endl;
return 0;
}
/**************************************
Problem id : SDUT OJ 2136
User name : 李俊
Result : Accepted
Take Memory : 456K
Take Time : 10MS
Submit Time : 2014-05-05 23:13:18
**************************************/
二叉树的建立与遍历(山东理工OJ)的更多相关文章
- C语言二叉树的建立与遍历
二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式 ...
- 二叉树的建立以及遍历的多种实现(python版)
二叉树是很重要的数据结构,在面试还是日常开发中都是很重要的角色. 首先是建立树的过程,对比C或是C++的实现来讲,其涉及到了较为复杂的指针操作,但是在面向对象的语言中,就不需要考虑指针, 内存等.首先 ...
- 一步一步写数据结构(二叉树的建立和遍历,c++)
简述: 二叉树是十分重要的数据结构,主要用来存放数据,并且方便查找等操作,在很多地方有广泛的应用. 二叉树有很多种类,比如线索二叉树,二叉排序树,平衡二叉树等,本文写的是最基础最简单的二叉树. 思路: ...
- 二叉树的建立与遍历(c语言)入门
树其实在本质上就是一对多,链表就是一对一. 二叉树的建立: 这里的代码采用的是最粗暴的创建方法,无实际用处.但初次学习二叉树可以通过这个创建方法更好的理解二叉树. 二叉树的遍历: 遍历在大体上分为递归 ...
- C语言实现二叉树的建立、遍历以及表达式的计算
实现代码 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <ctype ...
- python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)
#-*- coding:utf-8 -*- class Node: def __init__(self,data): self.data=data self.lchild=None self.rchi ...
- 众数问题(山东理工OJ)
题目描写叙述 给定含有n个元素的多重集合S,每一个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为众数. 比如,S={1,2,2,2,3.5}.多重集S的众数是2,其重数为3. 对于 ...
- 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)
树 利用顺序存储和链式存储的特点,可以实现树的存储结构的表示,具体表示法有很多种. 1)双亲表示法:在每个结点中,附设一个指示器指示其双亲结点在数组中的位置. 2)孩子表示法:把每个结点的孩子排列起来 ...
随机推荐
- 网页class命名规范
CSS样式命名整理 页面结构 容器: container/wrap 总体宽度:wrapper 页头:header 内容:content 页面主体:main 页尾:footer 导航:nav 側栏:si ...
- CPU 球迷助威清理灰尘图形的全过程
主机因为使用时间长的电源风扇,风扇轴承石油枯竭,导致拒绝或不转的风扇转速,热量使电源不能得到有效排除,往往会造成电脑死机,有几种方法来解决. 单省钱的办法例如以下: 1.把电源从主机上拆下,例如以下图 ...
- Git 使用规范流程(转)
团队开发中,遵循一个合理.清晰的Git使用流程,是非常重要的. 否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护. 下面是ThoughtBot 的Git使用规范流程.我从中 ...
- STL 二分查找三兄弟(lower_bound(),upper_bound(),binary_search())
一:起因 (1)STL中关于二分查找的函数有三个:lower_bound .upper_bound .binary_search -- 这三个函数都运用于有序区间(当然这也是运用二分查找的前提),以 ...
- Swift - 工具条(UIToolbar)的用法
1,UIBarButtonItem是工具条按钮,有如下5种init初始化方法: (1)初始化为普通图片按钮 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 ...
- 用Swift开发二维码扫描器教程
(原文:Building a QR Code Reader in Swift 作者:Simon Ng 译者:xiaoying )我相信大多数人都知道二维码(QR code)是什么,如果你对这个概念还不 ...
- operator= 复制操作符的意外
首先,看以下的代码的输出时什么: 上述代码做了最理所当然的事.就是将Derived的两个对象进行了交换.可是通过指针进行的赋值输出却不是预期的: 居然调用的是Base的operator=,也就意味着我 ...
- [翻译]利用C#获取终端服务(Terminal Services)会话的闲置时间
[翻译]利用C#获取终端服务(Terminal Services)会话的闲置时间 作者:Tuuzed(土仔) 发表于:2008年2月29日版权声明:可以任意转载,转载时请务必以超链接形式标明文章原 ...
- XML序列化反序列化—常用类
public class XMLSerializer { #region (public) xml序列化 /// <summary> /// ...
- 实现Runnable接口和扩展Thread使用场景
在上篇博文:java学习笔记-Thread中我们知道创建子线程的两个方式:实现Runnable接口和扩展Thread. 扩展Thread类和实现Runnable接口的使用场景: Thread类定义了派 ...