1. 程式人生 > >LetCode 106. 從中序與後序遍歷序列構造二叉樹

LetCode 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:
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        return buildTree(inorder, postorder, 0, inorder.size() - 1, 0, postorder.size() - 1);
    }
    
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder, int in_left, int in_right, int post_left, int post_right){
        if (in_left > in_right || post_left > post_right)
            return NULL;
        int rootVal = postorder[post_right];// 後序序遍歷中的最後一個節點為當前樹的根節點
        TreeNode* root = new TreeNode(rootVal);
        // 在中序序列中找到當前根節點
        int index = distance(inorder.begin(), find(inorder.begin(), inorder.end(), rootVal));
        // 算出左子樹和右子樹的節點個數
        int left_num = index - in_left;
        int right_num = in_right - index;
        // 最後遞迴構建左右子樹
        root->left = buildTree(inorder, postorder, in_left, index - 1, post_left, post_left + left_num - 1);
        root->right = buildTree(inorder, postorder, index + 1, in_right, post_left + left_num, post_right - 1);
        return root;
    } 
};

static int x=[](){
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    return 0;
}();

相關推薦

LetCode 106. 從中序列構造

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;

106 Construct Binary Tree from Inorder and Postorder Traversal 從中序列構造

etc emp gpo 構造 inorder lee UC from ons 給定一棵樹的中序遍歷與後序遍歷,依據此構造二叉樹。註意:你可以假設樹中沒有重復的元素。例如,給出中序遍歷 = [9,3,15,20,7]後序遍歷 = [9,15,7,20,3]返回如下的二叉樹:

[leetcode] 106. 從中序列構造

106. 從中序與後序遍歷序列構造二叉樹 後序遍歷的第一個元素肯定是根節點,在中序遍歷中找到該元素,左半是該節點的左子樹的元素,右半是該節點的右子樹元素,記左半的長度為L,後序遍歷中,前L個元素為左子樹的元素,除去最後一個元素外的後半部分則為右子樹的元素。遞迴處理即可。 class Solution {

Leetcode 106. 從中序列構造 C++

題目描述 思路 後序歷遍,最後一個元素就是根節點的元素,於是就可以找到這個根節點在中序歷遍中的位置,那麼左子樹的中序歷遍和右子樹的中序歷遍就可以知道。由此可以知道左子樹和右子樹的節點數量,進而可以在後序歷遍中確定左子樹的後序歷遍和右子樹的後序歷遍。之後,通過遞迴的思想,生成整棵樹。

LeetCode-106.從中序列構造(相關話題:深度優先搜尋)

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重複的元素。 例如,給出 中序遍歷 inorder = [9,3,15,20,7] 後序遍歷 postorder = [9,15,7,20,3] 返回如下的二叉樹: 3 / \

106. 從中序列構造(中等,

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重複的元素。 例如,給出 中序遍歷 inorder = [9,3,15,20,7] 後序遍歷 postorder = [9,15,7,20,3] 返回如下的二叉樹: 3 / \ 9

Leetcode 106從中序列構造(最詳細的解法!!!)

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重複的元素。 例如,給出 中序遍歷 inorder = [9,3,15,20,7] 後序遍歷 postorder = [9,15,7

Leetcode 106.從中序列構造

從中序與後序遍歷序列構造二叉樹 根據一棵樹的中序遍歷與後序遍歷構造二叉樹。 注意:你可以假設樹中沒有重複的元素。 例如,給出 中序遍歷 inorder = [9,3,15,20,7] 後序遍歷 postorder = [9,15,7,20,3] 返回如下的二叉樹: 3

leetcode 第105題(從前序列構造) ,第106題(從中序列構造)python解法(用時40ms)

leetcode 第105題(從前序與中序遍歷序列構造二叉樹) ,第106題(從中序與後序遍歷序列構造二叉樹)python解法(用時40ms) 先從105題開始: 第105題是利用前序和中序恢復二叉樹,主要還是應用遞迴的思想。 首先看一個簡單的例子,在如下樹中: 由於前序遍歷第一個

Leetcode 106. 從中序列構造

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;

Leetcode:106.從中序列構造

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重複的元素。 例如,給出 中序遍歷 inorder = [9,3,15,20,7] 後序遍歷 postorder = [9,15,7,20,3] 返回如下的二叉樹: 3 / \

【leetcode 106. 從中序列構造】解題報告

++ amp src 圖片 ima 遍歷序列 tree cto 建立 前往 中序,後序遍歷構造二叉樹, 中序,前序遍歷構造二叉樹 TreeNode* build(vector<int>& inorder, int l1, int r1,

[leetcode]從中/前序列構造

nod leetcode int 構造二叉樹 else begin 順序 strong 分割 從中序與後序遍歷序列構造二叉樹 根據一棵樹的中序遍歷與後序遍歷構造二叉樹。 註意: 你可以假設樹中沒有重復的元素。 例如,給出 中序遍歷 inorder = [9,3,15,20,

[Swift]LeetCode106. 從中序列構造 | Construct Binary Tree from Inorder and Postorder Traversal

Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. For example, gi

LeetCode106題:從中序列構造

思路:  本題的思路與LeetCode105題:從前序與中序遍歷序列構造二叉樹的思路非常類似。只不過這裡要根據後序遍歷序列遍歷當前節點而已。 class Solution { public TreeNode buildTree(int[] inorder, int

[Leetcode][python]從前序列構造/從中序列構造

題目大意 根據二叉樹的前序遍歷和中序遍歷( 中序和後序)結果生成二叉樹 假設沒有重複數字 解題思路 參考給中序和後序遍歷 看到樹首先想到要用遞迴來解題。以這道題為例:如果一顆二叉樹為{1,

105 Construct Binary Tree from Preorder and Inorder Traversal 從前序列構造

leet blog pub struct class null true ems inorder 給定一棵樹的前序遍歷與中序遍歷,依據此構造二叉樹。註意:你可以假設樹中沒有重復的元素。例如,給出前序遍歷 = [3,9,20,15,7]中序遍歷 = [9,3,15,20,7]

leetcode 105. 從前序列構造

binary col build for treenode class order dfs leetcode 根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 註意:你可以假設樹中沒有重復的元素。 例如,給出 前序遍歷 preorder = [3,9,20,15,7] 中序遍歷

[Swift]LeetCode105. 從前序列構造 | Construct Binary Tree from Preorder and Inorder Traversal

eno restart pub n) spa win int end als Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume th

leetcode-105- 從前序列構造(construct binary tree from preorder and inorder traversal)-java

題目及測試 package pid105; /*從前序與中序遍歷序列構造二叉樹 根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重複的元素。 例如,給出 前序遍歷 preorder = [3,9,20,15,7] 中序遍歷 inorder = [9,3,15