初识树结构,简单模拟无规律的二叉树,实现二叉树的构建,计算树的深度以及三种遍历方式以及搜索删除,销毁整个树
2017-08-09 15:41
956 查看
构建如图树结构:
#include<iostream>
#include <tchar.h>
using namespace std;
struct Tree//树基本结构体
{
TCHAR data;
struct Tree* Lnode;
struct Tree* Rnode;
};
Tree* CreateTree(Tree* & tree,TCHAR data)//创建节点
{
if (!tree)
{
tree = new Tree;
tree->data = data;
tree->Lnode = NULL;
tree->Rnode = NULL;
}
return tree;
}
void RemoveTree(Tree * & tree ,TCHAR DATA)//删除节点(只能一个分支的删除)
{
if (tree)
{
RemoveTree(tree->Lnode, DATA);
RemoveTree(tree->Rnode, DATA);
if (tree->data == DATA)
{
delete tree;
tree = NULL;
}
}
}
void TraverseTree(Tree* tree,char h)
{
if (tree)
{
switch (h)
{
case 1://前序遍历
printf("%c ", tree->data, h);
TraverseTree(tree->Lnode, h);
TraverseTree(tree->Rnode, h);
break;
case 2://中序遍历
TraverseTree(tree->Lnode, h);
printf("%c ", tree->data, h);
TraverseTree(tree->Rnode, h);
break;
case 3://后序遍历
TraverseTree(tree->Lnode, h);
TraverseTree(tree->Rnode, h);
printf("%c ", tree->data, h);
break;
}
}
}
void DestoryTree(Tree* tree)//销毁树
{
if (tree)
{
DestoryTree(tree->Lnode);
DestoryTree(tree->Rnode);
delete tree;
tree = NULL;
}
}
int DeptchTree(Tree* & tree)//计算树的深度
{
int Ldeptch, Rdeptch, deptch;
Ldeptch = Rdeptch = deptch = 0;
if (tree)
{
Ldeptch = DeptchTree(tree->Lnode);
Rdeptch = DeptchTree(tree->Rnode);
deptch = Ldeptch > Rdeptch ? Ldeptch : Rdeptch;
return deptch + 1;
}
else
return 0;
}
int main()
{
Tree*a = NULL;
//模拟树的生成
CreateTree(a, 'A');
CreateTree(a->Lnode, 'B');
CreateTree(a->Lnode->Rnode, 'C');
CreateTree(a->Rnode, 'D');
CreateTree(a->Rnode->Rnode, 'E');
CreateTree(a->Rnode->Rnode->Lnode, 'F');
cout << "树的深度为:"<<DeptchTree(a) << endl;
TraverseTree(a, 1);
cout << "前序遍历" << endl;
TraverseTree(a, 2);
cout << "中序遍历" << endl;
TraverseTree(a, 3);
cout << "后序遍历" << endl;
//删除
RemoveTree(a, 'B');
RemoveTree(a, 'F');
cout << "删除B和F后:"<< endl;
TraverseTree(a,1);
cout << "前序遍历" << endl;
TraverseTree(a, 2);
cout << "中序遍历" << endl;
TraverseTree(a, 3);
cout << "后序遍历" << endl;
//销毁整个树
DestoryTree(a);
system("pause");
return 0;
}
运行结果如下:
相关文章推荐
- 二叉树的创建,插入,删除,输出,求高度,求度以及三种遍历方式实现
- 二叉树的建立以及三种遍历方式的递归、非递归的实现
- java实现二叉树的构建以及三种遍历方法(先序遍历,中序遍历,后续遍历)
- Java实现完全二叉树的构建以及三种遍历方式
- (学习java)二叉树的链式实现以及三种遍历方式
- 二叉树创建以及遍历(j简单创建、遍历、叶子计数、深度计数、销毁)之1
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)
- 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历
- 二叉树三种遍历方式 递归与非递归实现
- java实现二叉树的构建以及3种遍历方法
- C语言实现二叉树的建立、遍历以及表达式的计算
- 二叉树三种遍历(递归以及非递归实现)
- java实现二叉树的构建以及3种遍历方法
- java实现二叉树的构建以及3种遍历方法
- 二叉树的java构建和三种遍历方式
- 二叉树的三种遍历方式的循环和递归的实现方式
- 详细讲解二叉树三种遍历方式的递归与非递归实现
- 用非递归方式实现二叉树的前、中、后三种遍历方法
- C语言实现二叉树的建立、遍历以及表达式的计算