106.(105)從前序與中序遍歷序列構造二叉樹

題目描述:

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。

注意:
你可以假設樹中沒有重複的元素。

例如,給出

前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:

    3
   / \
  9  20
    /  \
   15   7

代碼:

/**
 * 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 CreateTree(0,preorder.size()-1,0,inorder.size(),preorder,inorder);
    }
    TreeNode* CreateTree(int pre_begin,int pre_end,int in_begin,int in_end,vector<int>&pre,vector<int>&ino)
    {
        if(in_begin>in_end||pre_begin>pre_end) return NULL;
        TreeNode *root=new TreeNode(pre[pre_begin]);
        int count=in_begin;
        while(count<=in_end&&pre[pre_begin]!=ino[count])count++;
        root->left=CreateTree(pre_begin+1,count-in_begin+pre_begin,in_begin,count-1,pre,ino);
        root->right=CreateTree(count-in_begin+pre_begin+1,pre_end,count+1,in_end,pre,ino);
        return root;
    }
};

執行效率:

執行用時:48 ms, 在所有 C++ 提交中擊敗了40.71%的用戶

內存消耗:17.5 MB, 在所有 C++ 提交中擊敗了42.42%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章