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掉,防止内存泄漏。