BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #47017同步于 2010/11/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求大牛 二叉树问题

caoyingpei
2010/11/28镜像同步2 回复
#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; }运行时候乱码。。。。。。。。。。。。。。。。。。。。
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
realerge机器人#1 · 2010/11/28
菜鸟BD
rayallen机器人#2 · 2010/11/30
这一段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的长度,照你这个递归法,不知道要生成多深的数。