链式二叉树

来源:互联网 发布:阿里云股票数据接口 编辑:程序博客网 时间:2024/06/08 03:40
#include<iostream>
#include<string>
using namespace std;
template<class T>
struct Node
{
T data;
Node<T> *lchild,*rchild;
};
template <class T>
class Tree
{
public:
Tree(){root=Creat(root);}
~Tree(){Release(root);}
void PreOrder(){PreOrder(root);}
void InOrder(){InOrder(root);}
void PostOrder(){PostOrder(root);}
void LeverOrder();
void last(){last(root);}
void child(){child(root);}
void parents(){parents(root);}
private:
Node<T> *root;
Node<T> *Creat(Node<T> *bt);
void Release(Node<T> *bt);
void PreOrder(Node<T> *bt);
void InOrder(Node<T> *bt);
void PostOrder(Node<T> *bt);
void last(Node<T> *bt);
void child(Node<T> *bt);
void parents(Node<T> *bt);
};
//前序
template <class T>
void Tree<T>::PreOrder(Node<T> *bt)
{
if(bt==NULL)return;
else{
cout<<bt->data;
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
//中序
template <class T>
void Tree<T>::InOrder(Node<T> *bt)
{
if(bt==NULL)return;
else{
InOrder(bt->lchild);
cout<<bt->data;
InOrder(bt->rchild);
}
}
//后序
template <class T>
void Tree<T>::PostOrder(Node<T> *bt)
{
if(bt==NULL)return;
else{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
cout<<bt->data;
}

}
//叶子
template <class T>
void Tree<T>::last(Node<T> *bt)
{
if(bt==NULL)return;
else if(bt->lchild==NULL&&bt->rchild==NULL){
cout<<bt->data;
}else{
last(bt->lchild);
last(bt->rchild);
}


}
//孩子
template <class T>
void Tree<T>::child(Node<T> *bt){
if(bt==NULL)return;
cout<<bt->data<<"的";
if(bt->lchild==NULL){
cout<<"没有左孩子"<<endl;
}else{
cout<<"左孩子为:"<<bt->lchild->data<<endl;


}
if(bt->rchild==NULL){
cout<<"没有右孩子"<<endl;
}else{
cout<<"右孩子为:"<<bt->rchild->data<<endl;
}
cout<<endl;
child(bt->lchild);
child(bt->rchild);

}
template <class T>
void Tree<T>::parents(Node<T> *bt)
{
if(bt==NULL)return;
if(bt->lchild!=NULL){
cout<<bt->lchild->data<<"的父母为:"<<bt->data<<endl;
}if(bt->rchild!=NULL){
cout<<bt->rchild->data<<"的父母为:"<<bt->data<<endl;
}
parents(bt->lchild);
parents(bt->rchild);


}


template <class T>
void Tree<T>::LeverOrder()
{
front=rear=-1;
if(root==NULL)return;
Q[++rear]=root;
while(front!=rear)
{
q=Q[++front];
cout<<q->data;
if(q->lchild!=NULL) Q[++rear]=q->lchild;
if(q->rchild!=NULL) Q[++rear]=q->rchild;
}
}
template <class T>
Node<T> *Tree<T>::Creat(Node<T> *bt)
{
T ch;
cin>>ch;
if(ch=='*')bt=NULL;
else{
bt=new Node<T>;
bt->data=ch;
bt->lchild=Creat(bt->lchild);
bt->rchild=Creat(bt->rchild);
}
return bt;
}
template<class T>
void Tree<T>::Release(Node<T>*bt)
{
if(bt!=NULL){
Release(bt->lchild);
Release(bt->rchild);
delete bt;
}
}


void main(){
cout<<"请输入字符:"<<endl;
Tree<char> tree;
cout<<"前序遍历:"<<endl;
tree.PreOrder();
cout<<endl;
cout<<"中序遍历:"<<endl;
tree.InOrder();
cout<<endl;
cout<<"后序遍历:"<<endl;
    tree.PostOrder();
cout<<endl;
cout<<"叶子为:";
tree.last();
cout<<endl;
tree.child();
tree.parents();
}
原创粉丝点击