剑指offer-重建二叉树

来源:互联网 发布:vip解析 采集源码 编辑:程序博客网 时间:2024/04/28 20:10

问题

题目:[重建二叉树]

思路

老问题了,递归建立。
基本思路是,根据先序中的第一个节点。到中序序列去进行划分左右子树。
然后递归建立左右子树即可。

代码

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {        return create( pre, 0, pre.size()-1, vin, 0, vin.size()-1 );           }private:    TreeNode* create(const vector<int>& pre, int s1, int t1, const vector<int>& in, int s2, int t2) {        if(s1 > t1) return NULL;        TreeNode* root = new TreeNode(pre[s1]);        int mid = 0;        for(mid = s2; mid <= t2; ++mid){            if(in[mid] == pre[s1]) break;        }        int left_len = mid-s2;        root->left = create( pre, s1+1, s1 + left_len, in, s2, mid-1 );        root->right = create(pre, s1+left_len+1, t1, in, mid+1, t2);        return root;    }};
0 0
原创粉丝点击