包括创建一个新树,
销毁一个树
输入为字符,输入‘#’表示为空树,停止
和插入二叉树
暂时,删除一个二叉树????
输入示例:AB#DE###C##
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void InitBiTree(BiTree &T);
void DestoryBiTree(BiTree &T);
void CreateBiTree(BiTree &T);
bool BiTreeEmpty(BiTree T);
int Now_BiTreeDepth(BiTree T,int h,int &depth);
int BiTreeDepth(BiTree T);
void Parent(BiTree T,BiTNode e);
void LeftChild(BiTree T,BiTNode e);
void RightChild(BiTree T,BiTNode e);
void LeftSibling(BiTree T,BiTNode e);
void InsertChild(BiTree p,int LR,BiTree c);
void DeleteChild(BiTree p,int LR);
void Traverse(BiTree T);
void visit(BiTree T);
void Preorder(BiTree T,void(*visit)(BiTree));
void Inorder(BiTree T,void(*visit)(BiTree));
void Sucorder(BiTree T,void(*visit)(BiTree));
int main()
{
BiTree T=new BiTNode;
InitBiTree(T);
CreateBiTree(T);
cout<<"Preorder: "<<endl;
Preorder(T,visit);
cout<<endl;
cout<<"Inorder: "<<endl;
Inorder(T,visit);
cout<<endl;
cout<<"Sucorder"<<endl;
Sucorder(T,visit);
cout<<endl;
int length=BiTreeDepth( T);
cout<<"the depth of this tree is: "<<length<<endl;
BiTree c=new BiTNode;
c->data='M';
c->lchild=c->rchild=NULL;
InsertChild(T,1,c);
Preorder(T,visit);
cout<<endl;
DestoryBiTree(T);
return 0;
}
void InitBiTree(BiTree &T)
{
//构造一颗空的二叉树T
T=NULL;
}
void DestoryBiTree(BiTree &T)
{
//销毁一个二叉树T
if(T)
{
if(T->lchild)
DestoryBiTree(T->lchild);
if(T->rchild)
DestoryBiTree(T->rchild);
delete T;
T=NULL;
}
}
void CreateBiTree(BiTree &T)
{
//输入AB#DE###C##
//构造二叉树
TElemType ch;
cout<<"Input an element:";
cin>>ch;
if(ch=='#')
T=NULL;
else{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
bool BiTreeEmpty(BiTree T)
{
if(T==NULL)
return true;
else
return false;
}
int Now_BiTreeDepth(BiTree T,int h,int &depth)
{
//h为T指向的结点所在层次,T指向二叉树的根,h的初始值为1
if(T)
{
if(h>depth)
depth=h;
Now_BiTreeDepth(T->lchild,h+1,depth);
Now_BiTreeDepth(T->rchild,h+1,depth);
}
}
int BiTreeDepth(BiTree T)
{
if(!T)
return 0;
else{
int hL=BiTreeDepth(T->lchild);
int hR=BiTreeDepth(T->rchild);
if(hL>=hR)
return hL+1;
else
return hR+1;
}
}
void LeftChild(BiTree T,BiTNode e);
void RightChild(BiTree T,BiTNode e);
void LeftSibling(BiTree T,BiTNode e);
void InsertChild(BiTree p,int LR,BiTree c)
{
//二叉树T存在,p指向T中某个结点,非空二叉树与T不相交且右子树为空
//LR=0,则插入C为p所指结点左子树,否则,右子树;p所指结点原有左或右子树,成为c右或左子树
if(p){
if(LR==0){
c->rchild=p->lchild;
p->lchild=c;
}
else{
c->lchild=p->rchild;
p->rchild=c;
}
}
}
void visit(BiTree T)
{
if(T)
cout<<T->data<<" ";
}
void Preorder(BiTree T,void(*visit)(BiTree))
{
if(T){
visit(T);
Preorder(T->lchild,visit);
Preorder(T->rchild,visit);
}
}
void Inorder(BiTree T,void(*visit)(BiTree))
{
if(T){
Inorder(T->lchild,visit);
visit(T);
Inorder(T->rchild,visit);
}
}
void Sucorder(BiTree T,void(*visit)(BiTree))
{
if(T){
Sucorder(T->lchild,visit);
Sucorder(T->rchild,visit);
visit(T);
}
}