上次,应聘兼职时,他们给了我一些题目,其中的一道是,给我们一些数据,让我们生成树,并进行先,中,后序遍历!!
有问题的请E-mail:cangzhu@163.com
我的这样做的 :
//建立树的方法是,取数组的中间的数为树根,左边的为左子树,右边的为右子树
#include "iostream.h" #include "stdio.h" #include "stdlib.h" #include "string.h" #define N 10
//节点类 class BNode { public: int data; BNode *lchild; BNode *rchild;
BNode() };
//二叉树类 class BTree { private: BNode *root; public: //构造函数 BTree(); //析构函数 ~BTree();
//树的销毁 void Destroy(BNode *node); //生成树 bool CreateTree(BNode *node,int data[],int len); bool CreateTree(int data[],int len);
//遍历 //先序 void FirstSearch(BNode *node); void FirstSearch(); //中序 void MidSearch(BNode *node); void MidSearch(); //后序 void LastSearch(BNode *node); void LastSearch(); };
//构造函数 BTree::BTree() { root=new BNode(); }
//默认的析构函数 BTree::~BTree()
//树的销毁 void BTree::Destroy(BNode *node) { if(!node) return;
delete node; FirstSearch(node->lchild); FirstSearch(node->rchild); }
//递归的生成树 bool BTree::CreateTree(BNode *node,int data[N],int len) { int i; BNode *left=new BNode(); BNode *right=new BNode();
//分割后,只剩一个数据 if(len==1) { node->data=data[0]; return true; } //分割后,只剩两个数据 if(len==2) { node->data=data[1];
left=new BNode(); left->data=data[0];
node->lchild=left; node->rchild=NULL; return true; }
//大于等于三个数据 int mid=(int)(len/2); node->data=data[mid]; node->lchild=left; node->rchild=right;
//左边的数据,右边的数据 int left_data[N]; int right_data[N];
//左子树的递归 for(i=0;i<mid;i++) CreateTree(left,left_data,mid);
//右子树的递归 for(i=0;i<len-mid-1;i++) CreateTree(right,right_data,len-mid-1);
return true; }
//生成树的函数 bool BTree::CreateTree(int data[N],int len) { return CreateTree(root,data,len); }
//先序遍历 void BTree::FirstSearch(BNode *node) { if(!node) return;
printf("%d ",node->data); FirstSearch(node->lchild); FirstSearch(node->rchild); }
void BTree::FirstSearch()
//中序遍历 void BTree::MidSearch(BNode *node) { if(!node) return;
MidSearch(node->lchild); printf("%d ",node->data); MidSearch(node->rchild); }
void BTree::MidSearch()
//后序遍历 void BTree::LastSearch(BNode *node) { if(!node) return;
LastSearch(node->lchild); LastSearch(node->rchild); printf("%d ",node->data); }
void BTree::LastSearch()
//测试函数 void main() { BTree *T=new BTree(); int data[N]; for(int i=0;i<N;i++) data[i]=i; T->CreateTree(data,N); T->FirstSearch(); cout<<endl; T->MidSearch(); cout<<endl; T->LastSearch(); }
|