106.(105)从前序与中序遍历序列构造二叉树

    技术2023-12-25  73

    题目描述:

    根据一棵树的前序遍历与中序遍历构造二叉树。

    注意: 你可以假设树中没有重复的元素。

    例如,给出

    前序遍历 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%的用户

    Processed: 0.008, SQL: 9