C++ 二叉树创建、遍历访问、删除
2017-07-13 10:04
357 查看
代码包含:二叉树数组创建(前序)、前序、中序、后序遍历、节点访问、删除
代码说明:该代码使用模板建立,一些地方并未完善,比如array[index]==-1,仅仅使用于数字类型,如果二叉树存储的是char或string,需在这之前判断类型,给予特定的空标识,对于节点的访问,使用一个函数指针传递对节点的操作,删除只能使用后序遍历的方式
#include<iostream>
using namespace std;
template <typename T>
struct Node{
T data;
Node<T>* left;
Node<T>* right;
};
template <typename T>
void Create(Node<T>*& node,T array[],int& index,int& length){
if(index>=length||array[index]==-1){
node=0;
}
else{
node=new Node<T>();
node->data=array[index];
Create(node->left,array,++index,length);
Create(node->right,array,++index,length);
}
}
template <typename T>
void PreOrderTraversal(Node<T>*& node,void(*func)(Node<T>*& arg)){
if(node!=0){
if(func!=0){
func(node);
}
PreOrderTraversal(node->left,func);
PreOrderTraversal(node->right,func);
}
}
template <typename T>
void InOrderTraversal(Node<T>*& node,void(*func)(Node<T>*& arg)){
if(node!=0){
InOrderTraversal(node->left,func);
if(func!=0){
func(node);
}
InOrderTraversal(node->right,func);
}
}
template <typename T>
void PostOrderTraversal(Node<T>*& node,void(*func)(Node<T>*& arg)){
if(node!=0){
PostOrderTraversal(node->left,func);
PostOrderTraversal(node->right,func);
if(func!=0){
func(node);
}
}
}
template <typename T>
void Delete(Node<T>*& node){
delete node;
}
template <typename T>
void Show(Node<T>*& node){
cout<<node->data<<endl;
}
/*
1
2 5
3 4 6
*/
int main(){
void(*Delegate)(Node<int>*& arg);
Delegate=0;
int array[]={
1,2,3,-1,-1,4,-1,-1,5,6,-1,-1,-1
};
Node<int>* tree;
int index=0;
int length=sizeof(array)/sizeof(array[0]);
Create(tree,array,index,length);
Delegate=Show;
InOrderTraversal(tree,Delegate);
Delegate=Delete;
PostOrderTraversal(tree,Delegate);
return 0;
}
代码说明:该代码使用模板建立,一些地方并未完善,比如array[index]==-1,仅仅使用于数字类型,如果二叉树存储的是char或string,需在这之前判断类型,给予特定的空标识,对于节点的访问,使用一个函数指针传递对节点的操作,删除只能使用后序遍历的方式
#include<iostream>
using namespace std;
template <typename T>
struct Node{
T data;
Node<T>* left;
Node<T>* right;
};
template <typename T>
void Create(Node<T>*& node,T array[],int& index,int& length){
if(index>=length||array[index]==-1){
node=0;
}
else{
node=new Node<T>();
node->data=array[index];
Create(node->left,array,++index,length);
Create(node->right,array,++index,length);
}
}
template <typename T>
void PreOrderTraversal(Node<T>*& node,void(*func)(Node<T>*& arg)){
if(node!=0){
if(func!=0){
func(node);
}
PreOrderTraversal(node->left,func);
PreOrderTraversal(node->right,func);
}
}
template <typename T>
void InOrderTraversal(Node<T>*& node,void(*func)(Node<T>*& arg)){
if(node!=0){
InOrderTraversal(node->left,func);
if(func!=0){
func(node);
}
InOrderTraversal(node->right,func);
}
}
template <typename T>
void PostOrderTraversal(Node<T>*& node,void(*func)(Node<T>*& arg)){
if(node!=0){
PostOrderTraversal(node->left,func);
PostOrderTraversal(node->right,func);
if(func!=0){
func(node);
}
}
}
template <typename T>
void Delete(Node<T>*& node){
delete node;
}
template <typename T>
void Show(Node<T>*& node){
cout<<node->data<<endl;
}
/*
1
2 5
3 4 6
*/
int main(){
void(*Delegate)(Node<int>*& arg);
Delegate=0;
int array[]={
1,2,3,-1,-1,4,-1,-1,5,6,-1,-1,-1
};
Node<int>* tree;
int index=0;
int length=sizeof(array)/sizeof(array[0]);
Create(tree,array,index,length);
Delegate=Show;
InOrderTraversal(tree,Delegate);
Delegate=Delete;
PostOrderTraversal(tree,Delegate);
return 0;
}
相关文章推荐
- C++ 二叉树创建、遍历访问、删除
- C++ 二叉树(创建,遍历,查找,插入,删除)『菜鸟版』
- python的【字典dict】:创建、访问、更新、删除;查看键、值、键值对;遍历;排序
- C++实现二叉树(初始化,删除,遍历)
- C++实现二叉树的插入、删除、查询、遍历
- 二叉树的创建和遍历C++实现
- 二叉树创建、删除、(递归/非递归)先序(中序/后序)遍历
- C++ 二叉树实现 创建,先序遍历,中序遍历,后序遍历
- 【C/C++】文件夹的打开、遍历、删除、创建、关闭操作汇总
- C++实现二叉树所有操作 -- 创建递归遍历迭代遍历拷贝清空查找
- python 学习记录(11)-文件处理/读取文件/文件写入内容/文件删除/文件复制/文件重命名/后缀名/内容查找与替换/文件比较/ 配置文件访问/目录创建与删除/遍历目录/定向输出
- python的【字典dict】:创建、访问、更新、删除;查看键、值、键值对;遍历;排序
- [C++]数据结构:链表二叉树的创建与四种遍历方式
- c++实现二叉树的非递归创建以及非递归先序、中序、后序遍历
- 二叉树的创建,插入,删除,输出,求高度,求度以及三种遍历方式实现
- Java实现二叉树的创建、删除、遍历
- 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历
- 二叉搜索树的创建、遍历、插入、删除(C++版本)
- 二叉树的创建,遍历,查找,删除,插入,修改
- C++单链表的操作(创建,删除,打印,遍历,插入)