105. Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:enrique iglesias 知乎 编辑:程序博客网 时间:2024/06/15 17:17

DFS,通过preorder和inorder得到树。

/** * 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(int i1,int j1,int i2,int j2,vector<int>& preorder, vector<int>& inorder)    {        if(i1==j1&&i2==j2)        {            TreeNode* root=new TreeNode(preorder[i1]);            return root;        }        else if(i1>j1||i2>j2)            return NULL;        else        {            TreeNode* root=new TreeNode(preorder[i1]);            int mid;            for(mid=i2;mid<=j2;mid++)            {                if(preorder[i1]==inorder[mid])                    break;            }            //mid---i1            root->left=buildTree(i1+1,i1+mid-i2,i2,mid-1,preorder, inorder);            root->right=buildTree(i1+mid-i2+1,j1,mid+1,j2,preorder, inorder);            return root;        }    }    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {        if(preorder.size()==0)            return NULL;        return buildTree(0,preorder.size()-1,0,inorder.size()-1,preorder,inorder);    }};
0 0
原创粉丝点击