LeetCode

来源:互联网 发布:淘宝店如何装修 编辑:程序博客网 时间:2024/06/18 05:28

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

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


给出一棵二叉树的中根遍历和后根遍历,求这棵树。

基本思路:我们有in和post数组长度都为7,那么我们可以知道post[6]是根。找到post[6]对应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>& inorder, vector<int>& postorder) {        return solve(0, postorder.size()-1, 0, inorder.size()-1, inorder, postorder);    }        TreeNode* solve(int post, int poed, int inst, int ined, vector<int>& inorder, vector<int>& postorder) {        if (inst > ined || post > poed) return NULL;                TreeNode* cur = new TreeNode(postorder[poed]);        int index = 0;        for (int i = inst; i <= ined; ++i) {            if (inorder[i] != cur->val) continue;            index = i;            break;        }                cur->left = solve(post, poed-(ined-index+1), inst, index-1, inorder, postorder);        cur->right = solve(post+(index-inst), poed-1, index+1, ined, inorder, postorder);        return cur;    }};

原创粉丝点击