LeetCode

来源:互联网 发布:青少年行知实践园的题 编辑:程序博客网 时间:2024/06/05 06:02

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.


给出一棵树的先根遍历和中根遍历,求这棵树。

这题放了一阵子才拿出来做,发现没有想象中那么可怕。

基本思想是:我们有pre和in两个数组长度都为7,那么我们可以知道pre[0]是根。找到pre[0]对应in中的位置,假设是in[3]。那么可以得出in[0]~in[2]为左子树,in[4]~in[6]为右子树。同理继续向下递归。

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {        return solve(0, 0, inorder.size()-1, preorder, inorder);    }        TreeNode* solve(int prest, int inst, int ined, vector<int>& preorder, vector<int>& inorder) {        if (inst > ined) return NULL;                TreeNode* cur = new TreeNode(preorder[prest]);        int index = 0;        for (int i = inst; i <= ined; ++i) {//在inorder中哪个位置            if (preorder[prest] != inorder[i]) continue;            index = i;            break;        }                cur->left = solve(prest+1, inst, index-1, preorder, inorder);        cur->right = solve(prest+index-inst+1, index+1, ined, preorder, inorder);        return cur;    }};


原创粉丝点击