返回信息流#include<iostream>
using namespace std;
template<class T>
struct Node
{
T data;
Node<T>* lch;
Node<T>* rch;
};
template<class T> class BiTree
{
public:
Node<T> *root;
BiTree(T data[]);
BiTree():root(NULL){}
Node<T>*& Root();
void Create(Node<T>* &R,T*a,int i);
void Release(Node<T> *R);
void Preorder(Node<T> *R);
void Inorder(Node<T> *R);
void Postorder(Node<T> *R);
int Depth(Node<T> *R,int d);
~BiTree();
};
template <class T> Node<T>*& BiTree<T>::Root()
{
return root;
}
//使用顺序结构存储的数据建立二叉链表树
template <class T> void BiTree<T>::Create(Node<T> *&R,T*a,int i)
{
if (a[i-1]==0)
R = NULL;
else
{
R=new Node<T>;
R->data = a[i-1];
Create(R->lch,a, 2*i);
Create(R->rch,a, 2*i+1);
}
}
template <class T> BiTree<T>::BiTree(T data[])
{
Create(root,data,1);
}
template <class T>
void BiTree<T>::Preorder(Node<T> *R)
{
if (R!=NULL) {
cout<<R->data;
Preorder(R->lch);
Preorder(R->rch);
}
}
template <class T> void BiTree<T>::Inorder(Node<T> *R)
{
if (R!=NULL) {
Inorder(R->lch);
cout<<R->data;
Inorder(R->rch);
}
}
template <class T> void BiTree<T>::Postorder(Node<T> *R)
{
if (R!=NULL) {
Postorder(R->lch);
Postorder(R->rch);
cout<<R->data;
}
}
/*template <class T> void BiTree<T>::Levelorder(Node<T> *R)
{ MAXSIZE=100;
Node<T> queue[MAXSIZE];
int f=0,r=0;
if(R!=NULL)
queue[++r]=R;
while(f!=r)
{
Node<T>*p=queue[++f];
cout<<p->data;
if(p->lch!=NULL)
queue[++r]=p->lch;
if(p->rch!=NULL)
queue[++r]=p->rch;
}
}*/
//销毁二叉树
template <class T> void BiTree<T>::Release(Node<T> *R)
{
if (R!=NULL) {
Release(R->lch);
Release(R->rch);
delete R;
}
}
template <class T> BiTree<T>::~BiTree()
{
Release(root);
}
//求树的深度
template <class T> int BiTree<T>::Depth(Node<T> *R,int d)
{
if (R==NULL) return d;
if ((R->lch==NULL) && (R->rch==NULL))
return d+1;
else
{
int m = Depth(R->lch,d+1);
int n = Depth(R->rch,d+1);
return n>m? n:m;
}
}
void main()
{
char a[8]={'A','B','C','D','E','G','F','H'};
BiTree<char> ChBiTree;
ChBiTree.Create(ChBiTree.Root(),a,1);
ChBiTree.Preorder(ChBiTree.Root());
cout<<endl;
ChBiTree.Inorder(ChBiTree.Root());
cout<<endl;
ChBiTree.Postorder(ChBiTree.Root());
cout<<endl;
/*ChBiTree.Levelorder(ChBiTree.Root());
cout<<endl;*/
int depth=0;
cout<<ChBiTree.Depth(ChBiTree.Root(),depth)<<endl;
}运行时候乱码。。。。。。。。。。。。。。。。。。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #47017同步于 2010/11/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求大牛 二叉树问题
caoyingpei
2010/11/28镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
这一段template <class T> void BiTree<T>::Create(Node<T> *&R,T*a,int i)
{
if (a[i-1]==0)
R = NULL;
else
{
R=new Node<T>;
R->data = a[i-1];
Create(R->lch,a, 2*i);
Create(R->rch,a, 2*i+1);
}
}
第一句改成 if ((a[i-1]==0)||(i>8))
你的数组就8的长度,照你这个递归法,不知道要生成多深的数。