leetcode 105 —— Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:工具书阅读软件 编辑:程序博客网 时间:2024/06/07 05:34

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

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


思路:在中序中搜索先序的第一个节点,就能将左子树,根,右子树全部明确。搜索改为二分法,反而降低了效率。后续继续改进


class Solution {public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int n = preorder.size() - 1;return createTree(preorder, 0, n, inorder, 0, n );}TreeNode* createTree(vector<int>& preorder,int start1,int end1, vector<int>& inorder,int start2,int end2) {//if (start1<0||end1>=preorder.size()||start2<0||end2>=preorder.size()||start1 > end1||start2>end2)if (start1 > end1)return nullptr;TreeNode* root = new TreeNode(preorder[start1]);int i = 0;while (start2+i <= end2 &&inorder[start2+i] != preorder[start1] )i++;root->left = createTree(preorder, start1 + 1, start1+i, inorder, start2, start2+i - 1);root->right = createTree(preorder,start1+ i + 1, end1, inorder,start2+ i + 1, end2);return root;}};



0 0