前序遍历和中序遍历树构造二叉树

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
 

class Solution {
    /**
     *@param preorder : A list of integers that preorder traversal of a tree
     *@param inorder : A list of integers that inorder traversal of a tree
     *@return : Root of a tree
     */
public:
    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
        // write your code here
        int in_num;
        int length=inorder.size();
        TreeNode* root=new TreeNode;
        if(length==0) return NULL;
        if(length==1) 
        {
            root->val = preorder[0];
            root->left = root->right = NULL;
            return root;
        }

        root->val=preorder[0];
        for(int i=0;i<length;i++)
        {
            if(preorder[0]==inorder[i])
            {
                in_num=i;
                break;
            }
        }
        vector<int> left_preorder_new;
        vector<int> left_inorder_new;
        for(int j=0;j<in_num;j++)
        {
            left_preorder_new.push_back(preorder[j+1]);
            left_inorder_new.push_back(inorder[j]);
        }
        root->left=buildTree(left_preorder_new,left_inorder_new);
        
        vector<int> right_preorder_new;
        vector<int> right_inorder_new;
        for(int j=in_num+1;j<length;j++)
        {
            right_preorder_new.push_back(preorder[j]);
            right_inorder_new.push_back(inorder[j]);
        }
        root->right=buildTree(right_preorder_new,right_inorder_new);
        return root;
    }
};

 

posted on 2016-07-22 17:04  gilin  阅读(113)  评论(0)    收藏  举报