Leetcode:105. 從前序與中序遍歷序列構造二叉樹&106. 從中序與後序遍歷序列構造二叉樹

Leetcode:105. 從前序與中序遍歷序列構造二叉樹&106. 從中序與後序遍歷序列構造二叉樹

Leetcode:105. 從前序與中序遍歷序列構造二叉樹&106. 從中序與後序遍歷序列構造二叉樹html

這道題是經典的模板題啦~node

用前序中序後序遍歷結果建樹的模板請跳轉到:前中後序創建樹或者直接歷遍post

直接默寫!!!ui

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:
    vector<int> preOrder,inOrder;
    TreeNode* built(int root,int start,int end,TreeNode* tree){
        if(start>end) return NULL;
        if(tree==NULL) tree=new TreeNode(preOrder[root]);
        int index=start;
        while(inOrder[index]!=preOrder[root]) index++;
        tree->left=built(root+1,start,index-1,tree->left);
        tree->right=built(root+index-start+1,index+1,end,tree->right);
        return tree;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        preOrder=preorder,inOrder=inorder;
        TreeNode* tree=NULL;
        tree=built(0,0,preOrder.size()-1,tree);
        return tree;
    }
};

106. 從中序與後序遍歷序列構造二叉樹

/**
 * 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:
    vector<int> inOrder,postOrder;
    TreeNode* build(int root,int start,int end,TreeNode* tree){
        if(start>end) return NULL;
        if(tree==NULL) tree=new TreeNode(postOrder[root]);
        int index=start;
        while(postOrder[root]!=inOrder[index]) index++;
        tree->left=build(root-end+index-1,start,index-1,tree->left);
        tree->right=build(root-1,index+1,end,tree->right);
        return tree;
    }
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        inOrder=inorder,postOrder=postorder;
        TreeNode* tree=NULL;
        tree=build(inOrder.size()-1,0,inOrder.size()-1,tree);
        return tree;
    }
};
相關文章
相關標籤/搜索