题目描写叙述

已知一个按先序序列输入的字符序列,如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)的更多相关文章

  1. C语言二叉树的建立与遍历

    二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式 ...

  2. 二叉树的建立以及遍历的多种实现(python版)

    二叉树是很重要的数据结构,在面试还是日常开发中都是很重要的角色. 首先是建立树的过程,对比C或是C++的实现来讲,其涉及到了较为复杂的指针操作,但是在面向对象的语言中,就不需要考虑指针, 内存等.首先 ...

  3. 一步一步写数据结构(二叉树的建立和遍历,c++)

    简述: 二叉树是十分重要的数据结构,主要用来存放数据,并且方便查找等操作,在很多地方有广泛的应用. 二叉树有很多种类,比如线索二叉树,二叉排序树,平衡二叉树等,本文写的是最基础最简单的二叉树. 思路: ...

  4. 二叉树的建立与遍历(c语言)入门

    树其实在本质上就是一对多,链表就是一对一. 二叉树的建立: 这里的代码采用的是最粗暴的创建方法,无实际用处.但初次学习二叉树可以通过这个创建方法更好的理解二叉树. 二叉树的遍历: 遍历在大体上分为递归 ...

  5. C语言实现二叉树的建立、遍历以及表达式的计算

    实现代码 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <ctype ...

  6. python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)

    #-*- coding:utf-8 -*- class Node: def __init__(self,data): self.data=data self.lchild=None self.rchi ...

  7. 众数问题(山东理工OJ)

    题目描写叙述 给定含有n个元素的多重集合S,每一个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为众数. 比如,S={1,2,2,2,3.5}.多重集S的众数是2,其重数为3. 对于 ...

  8. 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。

    //归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...

  9. C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)

    树 利用顺序存储和链式存储的特点,可以实现树的存储结构的表示,具体表示法有很多种. 1)双亲表示法:在每个结点中,附设一个指示器指示其双亲结点在数组中的位置. 2)孩子表示法:把每个结点的孩子排列起来 ...

随机推荐

  1. java中遍历MAP,嵌套map的几种方法

    java中遍历MAP的几种方法 Map<String,String> map=new HashMap<String,String>();    map.put("us ...

  2. Android应用开发学习笔记之播放视频

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在Android中,我们可以通过使用VideoView类或者MediaPlayer类来播放视频. 一.使用Video ...

  3. unity中怎样获取全部子物体的组件

    public GameObject[] obj;     void Awake()     {             for (int i = 0; i < obj.Length; i++) ...

  4. 【问题解决】syntax error: unexpected end of file或-bash: ./full_build.sh: /bin/bash^M: bad interpreter: No

    在阅读的过程中有不论什么问题,欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801 运行一个脚本full_build.sh 时, 一直是提示我: -bash: ./ ...

  5. 排列-条件求和(Code)

    static void Main(string[] args) { // Generate data int arraySize; int[] data; Random rnd; arraySize ...

  6. 联系人数据库设计之AbstractContactsProvider

    个人见解,欢迎交流. 联系人数据库设计,源代码下载请自行去android官网下载. package com.android.providers.contacts; import android.con ...

  7. timeout connect 10000 # default 10 second time out if a backend is not found

    timeout connect <timeout> timeout contimeout <timeout> (deprecated) Set the maximum time ...

  8. [置顶] Cocos2d-x 实例源码分析之二 小实例的主框架

    这篇文章是分析第一个小实例ActionTest的源码.其实所有实例程序的结构都是一样的,只有特定方法里的代码不同,大的框架都是一样的.也就是说看完这篇文章你就可以自己开始分析其他源码了. 废话不多说, ...

  9. thinkPHP 输出及其模板调用(三)

    原文:thinkPHP 输出及其模板调用(三) ThinkPHP 的输出(重点) a.通过 echo 等PHP原生的输出方式在页面中输出 b.通过display方法输出(thinkphp\Home\L ...

  10. [Erlang危机](5.0)执行时指标

    原创文章.转载请注明出处:server非业余研究http://blog.csdn.net/erlib 作者Sunface .  Then, in times of need, it's also po ...