先序中序后序建二叉树

 1 class tree{//中序加后序
 2 private:
 3     struct TNode{
 4         int date;
 5         TNode *lchild, *rchild;
 6     };
 7 
 8 
 9     /*vector<int> post;
10     vector<int> in;*/
11 
12     int post[50];
13     int in[50];
14 
15 public:
16 
17 
18     tree(){
19 
20 
21         int N;
22         cin >> N;
23         for(int i = 0; i < N; i++){
24             cin >> in[i];
25         }
26         for(int i = 0; i < N; i++){
27             cin >> post[i];
28         }
29 
30         TNode *T = createTree(0, N - 1, 0, N - 1);
31 
32         Print(T);
33 
34     }
35 
36     TNode *createTree(int postL, int postR, int inL, int inR){
37 
38         if(postL > postR){
39             return NULL;
40         }
41         TNode *root = new TNode;
42         root->date = post[postR];
43         int k;
44         for(k = inL; k <= inR; k++){
45             if(in[k] == post[postR])
46                 break;
47         }
48         int numLeft = k - inL;
49         root->lchild = createTree(postL, postL + numLeft - 1, inL, k - 1);
50         root->rchild = createTree(postL + numLeft, postR - 1, k + 1, inR);
51         return root;
52     }
53   
54 
55     
56 
57     ~tree(){ }
58 };

 先序+中序

 1 struct node{
 2     int data;
 3     node *lc, *rc;
 4 };
 5 /*
 6 3 2 4 1 6 5
 7 1 2 3 4 5 6
 8 */
 9 node *insert(int leftPre, int rightPre, int leftIn, int rightIn){
10     if(leftPre > rightPre) return nullptr;
11     auto r = new node;
12     r->lc = r->rc = nullptr;
13     r->data = pre[leftPre];
14     int k = leftIn;
15     while(in[k] != pre[leftPre]) ++k;
16     r->lc = insert(leftPre + 1, leftPre + k - leftIn, leftIn, k - 1);
17     r->rc = insert(leftPre + k - leftIn + 1, rightPre, k + 1, rightIn);
18     return r;
19 }

 

转载于:https://www.cnblogs.com/MasterYan576356467/p/11223383.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值