二叉树建立与遍历递归操作c++实现
来源:互联网 发布:mac os x 10.11破解版 编辑:程序博客网 时间:2024/05/01 09:43
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
//二叉树的数据类型
typedef char BiTType;
//二叉树结构体
typedef struct BiTNode
{
BiTType data;
BiTNode *lChild,*rChild;
}BiTNode,*BiTree;
//二叉树的类,可以进行二叉树的操作
class BTree
{
private:
//先序遍历的字符串
string Create;
//线序遍历时候指向字符的下标
int index;
BiTNode *root;
public:
//建立空二叉树
BTree();
//根据先序遍历的字符串建立二叉树
BTree(string &c);
BTree(char *S);
//递归函数
void CreateBiTree(BiTree &T);
//先序遍历
void PreOrderTraverse();
void Pre(BiTNode *T);
//中序遍历
void InOrderTraverse();
void In(BiTNode *T);
//后序遍历
void PostOrderTraverse();
void Post(BiTNode *T);
};
BTree::BTree()
{
this->root = NULL;
}
BTree::BTree(string &c)
{
this->Create = c;
this->index = 0;
this->CreateBiTree(this->root);
}
BTree::BTree(char *S)
{
this->Create = S;
this->index = 0;
this->CreateBiTree(this->root);
}
void BTree::CreateBiTree(BiTree &T)
{
BiTType temp;
if((temp = this->Create[this->index++]) == '#')
{
T = NULL;
}
else
{
T = new BiTNode;
T->data = temp;
CreateBiTree(T->lChild);
CreateBiTree(T->rChild);
}
}
//先序遍历
void BTree::PreOrderTraverse()
{
this->Pre(this->root);
}
void BTree::Pre(BiTNode *T)
{
if(T)
{
cout<<T->data;
Pre(T->lChild);
Pre(T->rChild);
}
}
//中序遍历
void BTree::InOrderTraverse()
{
this->In(this->root);
}
void BTree::In(BiTNode *T)
{
if(T)
{
In(T->lChild);
cout<<T->data;
In(T->rChild);
}
}
//后序遍历
void BTree::PostOrderTraverse()
{
this->Post(this->root);
}
void BTree::Post(BiTNode *T)
{
if(T)
{
Post(T->lChild);
Post(T->rChild);
cout<<T->data;
}
}
int main()
{
cout<<"二叉树演示"<<endl;
//建立二叉树
BTree BT("abc##de###f#g#h##");
cout<<"二叉树先序遍历"<<endl;
BT.PreOrderTraverse();
cout<<endl;
cout<<"二叉树中序遍历"<<endl;
BT.InOrderTraverse();
cout<<endl;
cout<<"二叉树后序遍历"<<endl;
BT.PostOrderTraverse();
cout<<endl;
return 0;
}
#include <cstdio>
#include <string>
using namespace std;
//二叉树的数据类型
typedef char BiTType;
//二叉树结构体
typedef struct BiTNode
{
BiTType data;
BiTNode *lChild,*rChild;
}BiTNode,*BiTree;
//二叉树的类,可以进行二叉树的操作
class BTree
{
private:
//先序遍历的字符串
string Create;
//线序遍历时候指向字符的下标
int index;
BiTNode *root;
public:
//建立空二叉树
BTree();
//根据先序遍历的字符串建立二叉树
BTree(string &c);
BTree(char *S);
//递归函数
void CreateBiTree(BiTree &T);
//先序遍历
void PreOrderTraverse();
void Pre(BiTNode *T);
//中序遍历
void InOrderTraverse();
void In(BiTNode *T);
//后序遍历
void PostOrderTraverse();
void Post(BiTNode *T);
};
BTree::BTree()
{
this->root = NULL;
}
BTree::BTree(string &c)
{
this->Create = c;
this->index = 0;
this->CreateBiTree(this->root);
}
BTree::BTree(char *S)
{
this->Create = S;
this->index = 0;
this->CreateBiTree(this->root);
}
void BTree::CreateBiTree(BiTree &T)
{
BiTType temp;
if((temp = this->Create[this->index++]) == '#')
{
T = NULL;
}
else
{
T = new BiTNode;
T->data = temp;
CreateBiTree(T->lChild);
CreateBiTree(T->rChild);
}
}
//先序遍历
void BTree::PreOrderTraverse()
{
this->Pre(this->root);
}
void BTree::Pre(BiTNode *T)
{
if(T)
{
cout<<T->data;
Pre(T->lChild);
Pre(T->rChild);
}
}
//中序遍历
void BTree::InOrderTraverse()
{
this->In(this->root);
}
void BTree::In(BiTNode *T)
{
if(T)
{
In(T->lChild);
cout<<T->data;
In(T->rChild);
}
}
//后序遍历
void BTree::PostOrderTraverse()
{
this->Post(this->root);
}
void BTree::Post(BiTNode *T)
{
if(T)
{
Post(T->lChild);
Post(T->rChild);
cout<<T->data;
}
}
int main()
{
cout<<"二叉树演示"<<endl;
//建立二叉树
BTree BT("abc##de###f#g#h##");
cout<<"二叉树先序遍历"<<endl;
BT.PreOrderTraverse();
cout<<endl;
cout<<"二叉树中序遍历"<<endl;
BT.InOrderTraverse();
cout<<endl;
cout<<"二叉树后序遍历"<<endl;
BT.PostOrderTraverse();
cout<<endl;
return 0;
}
0 0
- 二叉树建立与遍历递归操作c++实现
- 递归实现二叉树的建立及前中后序遍历 c
- 二叉树的建立与递归遍历C语言版
- (C++)二叉树的建立与递归方式遍历
- 二叉树的几种非递归建立与遍历的实现
- 【C++】二叉树遍历--递归与非递归实现
- 二叉树的建立及层次遍历及前中后序遍历递归与非递归的实现
- 二叉树的建立与输出以及其他一些相关操作(递归算法实现) C语言
- 二叉树的建立(非递归建立与定义建立)与基本操作(广度和深度遍历,求叶子树高)实现
- C语言二叉树建立,遍历(递归与非递归),交换子树
- C语言实现二叉树的递归遍历与非递归遍历
- C语言实现二叉树的递归遍历与非递归遍历
- C语言实现二叉树的常用的算法(递归与非递归实现遍历)
- C实现二叉树(模块化集成,遍历的递归与非递归实现)
- 二叉树建立、递归、非递归遍历
- 二叉树实现(包括遍历等各种操作,递归与非递归)
- 二叉树的建立与递归遍历C++版
- 二叉树的建立和递归遍历、非递归遍历操作
- 页面刷新 的js
- 在此安家了
- servlet
- “并发用户数”、“系统用户数”和“同时在线用户数”的计算公式
- 关于Oracle的时区问题
- 二叉树建立与遍历递归操作c++实现
- [解决]Jetty报错web-jsptaglibrary_1_2.dtd not found
- 【Unity】【技巧】如何在代码里面引用到Inspector里面显示的值
- 第一次,随便写写
- 三步搞定android单元测试
- Codeforces Round #219 (Div. 1)
- sync,fsync,fdatasync,fflush
- LeetCode Reorder List
- 黑马程序员 接口和内部类