leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:数据库服务器cpu 要求 编辑:程序博客网 时间:2024/06/09 17:29

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

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

在中序遍历中找前序遍历的第一个,也就是根节点。

找到的这个值将中序遍历分为左子树和右子树。

/** * 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* helper(vector<int> &preorder, int begin1, int end1, vector<int> &inorder, int begin2, int end2)    {        if (begin1 > end1)            return NULL;         int lenleft = find(inorder.begin(), inorder.end(), preorder[begin1]) - inorder.begin() - begin2;                TreeNode *p = new TreeNode(preorder[begin1]);             p->left = helper(preorder, begin1 + 1, begin1 + lenleft, inorder, begin2, begin2 + lenleft - 1);        p->right = helper(preorder, begin1 + lenleft + 1, end1, inorder, begin2 + lenleft + 1, end2);        return p;    }        TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder)     {        return helper(preorder, 0, preorder.size() - 1, inorder, 0, inorder.size() - 1);    }};



阅读全文
0 0
原创粉丝点击