数据结构复习——二叉树的几个基本操作
2016-07-03 10:03
666 查看
包括了几个很基本的操作,树的创建删除遍历等等
#include<bits/stdc++.h>
using namespace std;
typedef struct node* tree_pointer;
struct node
{
char ch;
tree_pointer left_child,right_child;
};
tree_pointer create(tree_pointer T)
{
char ch;
cin>>ch;
if(ch=='.')
T=NULL;
else
{
T=new node;
T->ch=ch;
T->left_child=create(T->left_child);
T->right_child=create(T->right_child);
}
return T;
}
void destroy(tree_pointer T)
{
if(T)
{
destroy(T->left_child);
destroy(T->right_child);
delete T;
T=NULL;
}
}
void preorder(tree_pointer T)
{
if(T)
{
cout<<T->ch;
preorder(T->left_child);
preorder(T->right_child);
}
}
void inorder(tree_pointer T)
{
if(T)
{
inorder(T->left_child);
cout<<T->ch;
inorder(T->right_child);
}
}
void postorder(tree_pointer T)
{
if(T)
{
preorder(T->left_child);
preorder(T->right_child);
cout<<T->ch;
}
}
queue <tree_pointer> q;
void levelorder(tree_pointer T)
{
if(T)
{
q.push(T);
while(!q.empty())
{
tree_pointer temp;
temp=q.front();
q.pop();
cout<<temp->ch;
if(temp->left_child)
q.push(temp->left_child);
if(temp->right_child)
q.push(temp->right_child);
}
}
}
int leaf(tree_pointer T)
{
if(!T)
return 0;
else
{
if(!T->left_child&&!T->right_child)
return 1;
return leaf(T->left_child)+leaf(T->right_child);
}
}
int height(tree_pointer T)
{
if(!T)
return 0;
return 1+max(height(T->left_child),height(T->right_child));
}
void exchangechild(tree_pointer T)
{
if(T)
{
tree_pointer temp;
if(T->left_child||T->right_child)
{
temp=T->left_child;
T->left_child=T->right_child;
T->right_child=temp;
exchangechild(T->left_child);
exchangechild(T->right_child);
}
}
}
int main()
{
tree_pointer T;
T=create(T);
preorder(T);
cout<<endl;
inorder(T);
cout<<endl;
postorder(T);
cout<<endl;
levelorder(T);
cout<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef struct node* tree_pointer;
struct node
{
char ch;
tree_pointer left_child,right_child;
};
tree_pointer create(tree_pointer T)
{
char ch;
cin>>ch;
if(ch=='.')
T=NULL;
else
{
T=new node;
T->ch=ch;
T->left_child=create(T->left_child);
T->right_child=create(T->right_child);
}
return T;
}
void destroy(tree_pointer T)
{
if(T)
{
destroy(T->left_child);
destroy(T->right_child);
delete T;
T=NULL;
}
}
void preorder(tree_pointer T)
{
if(T)
{
cout<<T->ch;
preorder(T->left_child);
preorder(T->right_child);
}
}
void inorder(tree_pointer T)
{
if(T)
{
inorder(T->left_child);
cout<<T->ch;
inorder(T->right_child);
}
}
void postorder(tree_pointer T)
{
if(T)
{
preorder(T->left_child);
preorder(T->right_child);
cout<<T->ch;
}
}
queue <tree_pointer> q;
void levelorder(tree_pointer T)
{
if(T)
{
q.push(T);
while(!q.empty())
{
tree_pointer temp;
temp=q.front();
q.pop();
cout<<temp->ch;
if(temp->left_child)
q.push(temp->left_child);
if(temp->right_child)
q.push(temp->right_child);
}
}
}
int leaf(tree_pointer T)
{
if(!T)
return 0;
else
{
if(!T->left_child&&!T->right_child)
return 1;
return leaf(T->left_child)+leaf(T->right_child);
}
}
int height(tree_pointer T)
{
if(!T)
return 0;
return 1+max(height(T->left_child),height(T->right_child));
}
void exchangechild(tree_pointer T)
{
if(T)
{
tree_pointer temp;
if(T->left_child||T->right_child)
{
temp=T->left_child;
T->left_child=T->right_child;
T->right_child=temp;
exchangechild(T->left_child);
exchangechild(T->right_child);
}
}
}
int main()
{
tree_pointer T;
T=create(T);
preorder(T);
cout<<endl;
inorder(T);
cout<<endl;
postorder(T);
cout<<endl;
levelorder(T);
cout<<endl;
return 0;
}
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 文件遍历排序函数
- C#数据结构之顺序表(SeqList)实例详解
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#中遍历Hashtable的4种方法
- C#数据结构之单链表(LinkList)实例详解
- Erlang中遍历取出某个位置的最大值代码
- 数据结构之Treap详解
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- 【数据结构与算法】数组应用4:多项式计算Java版