您的位置:首页 > 其它

二叉树的基本操作-递归实现

2015-09-02 00:33 375 查看
二叉树的一些基本操作学习

1.二叉树定义

typedef char Elemtype;

typedef struct TreeNode
{
Elemtype data;
struct TreeNode *lchild,*rchild;
}TreeNode,*BinTree;2.二叉树建立(先序递归建立)
//先序序列构造二叉树,形如ABC##DE###FG###
void CreatTree(BinTree &T)3.先序递归遍历二叉树
void PreOrderBinTree(BinTree T)4.中序递归遍历二叉树
void InOrderBinTree(BinTree T)5.后序递归遍历二叉树
void PostOrderBinTree(BinTree T)6.求二叉树深度
int TreeDepth(BinTree T)
7.求叶子结点数

int TreeLeaves(BinTree T)8.交换左右孩子
void ExChild(BinTree T)
9.二叉树销毁

void DestroyTree(BinTree &T)

完整例子:
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;

typedef char Elemtype;

typedef struct TreeNode
{
Elemtype data;
struct TreeNode *lchild,*rchild;
}TreeNode,*BinTree;

//先序序列构造二叉树,形如ABC##DE###FG###
void CreatTree(BinTree &T)
{
Elemtype ch;
cin>>ch;
if(ch=='#')
{
T=NULL;
}
else
{
T=new TreeNode; //T=(TreeNode*)malloc(sizeof(TreeNode));
T->data=ch;
CreatTree(T->lchild);
CreatTree(T->rchild);
}
}

//递归先序遍历二叉树
void PreOrderBinTree(BinTree T)
{
if(T!=NULL)
{
cout<<T->data<<" "; //访问结点
PreOrderBinTree(T->lchild);
PreOrderBinTree(T->rchild);
}
}

//递归中序遍历二叉树
void InOrderBinTree(BinTree T)
{
if(T!=NULL)
{
InOrderBinTree(T->lchild);
cout<<T->data<<" "; //访问结点
InOrderBinTree(T->rchild);
}
}

void PostOrderBinTree(BinTree T)
{
if(T!=NULL)
{
PostOrderBinTree(T->lchild);
PostOrderBinTree(T->rchild);
cout<<T->data<<" "; //访问结点
}
}

int TreeDepth(BinTree T)
{
int ldepth,rdepth;
if(T==NULL) return 0;
ldepth=TreeDepth(T->lchild);
rdepth=TreeDepth(T->rchild);
return ldepth>rdepth?(ldepth+1):(rdepth+1);
}

int TreeLeaves(BinTree T)
{
if(T==NULL) return 0;
if(T->lchild==NULL && T->rchild==NULL) return 1;
return TreeLeaves(T->lchild)+TreeLeaves(T->rchild);
}

void ExChild(BinTree T)
{
if(T!=NULL)
{
BinTree temp=NULL;
if(T->lchild!=NULL || T->rchild!=NULL)
{
temp=T->lchild;
T->lchild=T->rchild;
T->rchild=temp;
ExChild(T->lchild);
ExChild(T->rchild);
}
}
}

void DestroyTree(BinTree &T)
{
if(T!=NULL)
{
DestroyTree(T->lchild);
DestroyTree(T->rchild);
delete T; //free(T);
T=NULL;
}
}

//主函数
int main()
{
BinTree T;
CreatTree(T);

//PreOrder
cout<<"PreOrderBinTree:"<<endl;
PreOrderBinTree(T);
cout<<endl;

//InOrder
cout<<"InOrderBinTree:"<<endl;
InOrderBinTree(T);
cout<<endl;

//PostOrder
cout<<"PostOrderBinTree:"<<endl;
PostOrderBinTree(T);
cout<<endl;

//Tree depth
cout<<"Tree depth:"<<TreeDepth(T)<<endl;

//The number of leaves
cout<<"The number of leaves:"<<TreeLeaves(T)<<endl;

//Exchange Tree lchild and rchild;
ExChild(T);
cout<<"After exchange Tree child:"<<endl;
PreOrderBinTree(T);
cout<<endl;

//Destroy Tree
cout<<"Destroy Tree."<<endl;
DestroyTree(T);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息