leetcode.105从前序与中序遍历序列构造二叉树

前序的一个必然是这棵树的根,再根据这个根再中序中的位置得出左子树有多少节点,再获得左子树的前序和中序递归完成,右子树亦是如此。

/**
 * 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) {
        if(preorder.size()==0){
            return NULL;
        }
        if(preorder.size()==1){
            TreeNode* p=(TreeNode*)new TreeNode;
            p->val=preorder[0];
            p->left=NULL;
            p->right=NULL;
            return p;
        }
        int i;
        vector<int> a,b,c,d;
        TreeNode* p=(TreeNode*)new TreeNode;
        p->val=preorder[0];
        for(i=0;i<inorder.size();i++){
            
            if(inorder[i]==preorder[0]){
                break;
            }
            b.push_back(inorder[i]);
            a.push_back(preorder[i+1]);
        }
        p->left=buildTree(a,b);
        for(i+=1;i<preorder.size();i++){
            c.push_back(preorder[i]);
            d.push_back(inorder[i]);
        }
        p->right=buildTree(c,d);
        return p;
    }
};

  

猜你喜欢

转载自www.cnblogs.com/hyffff/p/12936548.html