秋林箭

每夜,携酒河上,饮且渔

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1 #include<iostream>
  2 using namespace std;
  3 
  4 struct BinaryTreeNode
  5 {
  6     int valua;
  7     BinaryTreeNode* left;
  8     BinaryTreeNode* right;
  9 };
 10 int Find(int str[],int len ,int v);
 11 void print(BinaryTreeNode*fNode);
 12 
 13 BinaryTreeNode* ConstructBinayTree(int pre[],int last[],int len)
 14 {
 15     if(len==0)return NULL;
 16     BinaryTreeNode *fNode=new BinaryTreeNode;
 17     int root=Find(last,len,pre[0]);
 18     fNode->valua=pre[0];
 19     
 20     if(root==0)
 21     {
 22         fNode->left=NULL;
 23     }
 24     else
 25     {
 26         int *zlstr=new int[root];
 27         for(int i=0;i<root;i++)
 28         {
 29             zlstr[i]=last[i];
 30         }
 31         int *qlstr=new int[root];
 32         for(int i=0;i<root;i++)
 33         {
 34             qlstr[i]=pre[i+1];
 35         }
 36         fNode->left=ConstructBinayTree(qlstr,zlstr,root);
 37         delete[] qlstr;
 38         delete[] zlstr;
 39     }
 40     
 41     if(len-root-1==0)
 42     {
 43         fNode->right=NULL;
 44     }
 45     else
 46     {
 47         int *qrstr=new int[len-root-1];
 48         for(int i=0;i<len-root-1;i++)
 49         {
 50             qrstr[i]=pre[i+root+1];
 51         }
 52         int *zrstr=new int[len-root-1];
 53         for(int i=0;i<len-root-1;i++)
 54         {
 55             zrstr[i]=last[i+root+1];
 56         }
 57         fNode->right=ConstructBinayTree(qrstr,zrstr,len-root-1);
 58         delete[] qrstr;
 59         delete[] zrstr;
 60     }
 61     return fNode;
 62 } 
 63 
 64 int Find(int str[],int len ,int v)
 65 {
 66     for(int i=0;i<len;i++)
 67     {
 68         if(str[i]==v)
 69             return i;
 70     }
 71 }
 72 void qianxu(BinaryTreeNode*fNode )
 73 {    
 74     if(fNode!=NULL)
 75     {
 76         print(fNode);
 77         qianxu(fNode->left);
 78         qianxu(fNode->right);
 79     }
 80 }
 81 void zhongxu(BinaryTreeNode*fNode )
 82 {
 83     if(fNode!=NULL)
 84     {
 85         zhongxu(fNode->left);
 86         print(fNode);
 87         zhongxu(fNode->right);
 88     }
 89 }
 90 
 91 void print(BinaryTreeNode*fNode)
 92 {
 93     cout<<fNode->valua;
 94 }
 95 
 96 int main()
 97 {
 98     int pre[]={1,2,4,7,3,5,6,8};
 99     int last[]={4,7,2,1,5,3,8,6};
100     BinaryTreeNode *FirstNode=ConstructBinayTree(pre,last,8);
101     //BinaryTreeNode*FirstNode=Construct(pre,last,8);
102     qianxu(FirstNode);
103     cout<<endl;
104     zhongxu(FirstNode);
105     delete FirstNode;
106 }

注意:想要返回函数内部定义的变量时,要new这个对象,然后在返回,因为new的在堆里。而且要注意使用之后delete掉,防止内存泄漏。

posted on 2015-07-02 21:39  zhangyee  阅读(126)  评论(0编辑  收藏  举报