C++实现对树的创建和前中后序遍历
#include<iostream>
#include<stdio.h>
using namespace std;
class BitNode
{
public:
char data;
BitNode * lchild;
BitNode * rchild;
};
class BitTree
{
private:
BitNode * pBase;
public:
BitTree()
{
CreateByPreOrder(pBase);
}
void show()
{
cout<<"前序遍历:"<<endl;
PreOrderTraverse(pBase);
cout<<endl<<"中序遍历:"<<endl;
InOrderTraverse(pBase);
cout<<endl<<"后序遍历:"<<endl;
BackOrderTraverse(pBase);
cout<<endl<<"深度为:"<<getTreeDeep(pBase)<<endl;
}
private:
void CreateByPreOrder(BitNode * &pB)
{
char ch;
if((ch=getchar())=='#')
{
pB=NULL;
}
else
{
pB=new BitNode;
pB->data=ch;
CreateByPreOrder(pB->lchild);
CreateByPreOrder(pB->rchild);
}
}
void PreOrderTraverse(BitNode * &pB)
{
if(pB)
{
cout<<pB->data;
PreOrderTraverse(pB->lchild);
PreOrderTraverse(pB->rchild);
}
}
void InOrderTraverse(BitNode * &pB)
{
if(pB)
{
InOrderTraverse(pB->lchild);
cout<<pB->data;
InOrderTraverse(pB->rchild);
}
}
void BackOrderTraverse(BitNode * &pB)
{
if(pB)
{
BackOrderTraverse(pB->lchild);
BackOrderTraverse(pB->rchild);
cout<<pB->data;
}
}
int getTreeDeep(BitNode * &pB)
{
int deep=0;
if(pB)
{
int lchildDeep=getTreeDeep(pB->lchild);
int rchildDeep=getTreeDeep(pB->rchild);
deep=lchildDeep>=rchildDeep?lchildDeep+1:rchildDeep+1;
}
return deep;
}
};
int main()
{
BitTree bt;
bt.show();
return 0;
}
C++实现对树的创建和前中后序遍历的更多相关文章
- [C++] 非递归实现前中后序遍历二叉树
目录 前置技能 需求描述 binarytree.h 具体实现 binarytree.cpp main.cpp 网上代码一搜一大片,大同小异咯. 书上的函数实现代码甚至更胜一筹,而且抄一遍就能用,唯一问 ...
- 数据结构-C语言递归实现树的前中后序遍历
#include <stdio.h> #include <stdlib.h> typedef struct tree { int number ; struct tree *l ...
- C语言二叉树的创建、(先中后序)遍历以及存在的问题
#include<stdlib.h> #include<stdio.h> #define True 1 #define False 0 typedef char TElemTy ...
- Binary Tree Traversal 二叉树的前中后序遍历
[抄题]:二叉树前序遍历 [思维问题]: 不会递归.三要素:下定义.拆分问题(eg root-root.left).终止条件 [一句话思路]: 节点非空时往左移,否则新取一个点 再往右移. [输入量] ...
- POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)
链接:poj.org/problem?id=2255 本文链接:http://www.cnblogs.com/Ash-ly/p/5463375.html 题意: 分别给你一个二叉树的前序遍历序列和中序 ...
- C++二叉树前中后序遍历(递归&非递归)统一代码格式
统一下二叉树的代码格式,递归和非递归都统一格式,方便记忆管理. 三种递归格式: 前序遍历: void PreOrder(TreeNode* root, vector<int>&pa ...
- 前中后序递归遍历树的体会 with Python
前序:跟->左->右 中序:左->根->右 后序:左>右->根 采用递归遍历时,编译器/解释器负责将递归函数调用过程压入栈并保护现场,在不同位置处理根节点即可实现不 ...
- Qt实现 动态化遍历二叉树(前中后层次遍历)
binarytree.h 头文件 #ifndef LINKEDBINARYTREE_H #define LINKEDBINARYTREE_H #include<c++/algorithm> ...
- 二叉树前中后/层次遍历的递归与非递归形式(c++)
/* 二叉树前中后/层次遍历的递归与非递归形式 */ //*************** void preOrder1(BinaryTreeNode* pRoot) { if(pRoot==NULL) ...
随机推荐
- 精通正则表达式(第三版)——Mastering Regular Expressions,3rd Edition——读书笔记1
基础知识介绍: 子表达式匹配 环视 引号内的字符串:"(^")*" 12小时制:(1[0123]|[1-9]):[0-5][0-9]*(am|pm) 24小时制:(([0 ...
- SQL 批量删除数据表
) while(exists(select * from sysobjects where name like '表名前缀%')) begin select @name=name from sysob ...
- ctrl+z暂停任务
(1) CTRL+Z挂起进程并放入后台 (2) jobs 显示当前暂停的进程 (3) bg %N 使第N个任务在后台运行(%前有空格) (4) fg %N 使第N个任务在前台运行 默认bg,fg不带% ...
- 面向对象的JavaScript系列一,创建对象
1.最简单的创建对象方法 var person = new Object(); person.name = "sam wu"; person.age = 25; person.jo ...
- 2013/7/17 HNU_训练赛5
sgu 542 Gena vs Petya sgu 543 Cafe 题意:有N组人需要被分配到某些固定了人数的桌子上,其中ai表示第i组有多少个人,安排作为需要符合如下安排:某一组的人员不能够单独在 ...
- Nginx基础知识之————什么是 Nginx?
本课时主要给大家讲解什么是 Nginx 和 Nginx 的功能,Nginx 与其他服务器的性能比较和 Nginx 的优点总结的知识,并结合实例让学员深入理解 Nginx 和 Nginx 的功能以及 N ...
- lab_c!
#include<stdio.h> hi() { printf("hello world!\n"); } int main() { hi(); int i = hi() ...
- HDU4801·二阶魔方
题意:给定二阶魔方初始状态,问N(1 <= N <= 7)步旋转操作以内最多能使几个面相同. dfs搜索+剪枝. 魔方的每个旋转操作即对应于一个置换操作.又因为相对运动,上层左旋一次和下层 ...
- Git学习(1)Git 简介
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Git ...
- 对于syncedmen类的代码分析
对于数据在cpu与GPU之间同步的问题,caffe中用syncedMemory这个类来解 决:在GPU模式下,并且使用CUDA时,可以用CaffeMallocHost函数与CaffeFreeHost函 ...