1. 程式人生 > >LeetCode105. 從前序與中序遍歷序列構造二叉樹

LeetCode105. 從前序與中序遍歷序列構造二叉樹

題目分析:根據前序的第一個節點就可以確定二叉樹的根節點,然後在中序序列中找到該節點。位於該節點左側的是根節點的左子樹,位於該節點右側的是根節點的右子樹。然後根據左右子樹節點的數量可以在前序序列中知道各自子樹的前序序列。假設左子樹節點的數量為3,那麼除了前序的第一個節點,往後數三個就是該左子樹的節點的前序序列,相應地,後面的節點就是右子樹節點的前序序列。

將preorder[pl.....pr]記作前序序列,將inorder[il.....ir]記作相應的中序序列,不斷遞迴下去。

程式碼展示:

/**
 * 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) {
        return constructTree(preorder,0,preorder.size()-1,inorder,0,inorder.size()-1);
    }
    
    TreeNode* constructTree(vector<int>& preorder,int pl,int pr,vector<int>& inorder,int il,int ir){
        if(pl>pr || il>ir)
            return NULL;
        TreeNode* root = new TreeNode(preorder[pl]);
        for(int k=il;k<=ir;k++){
            if(preorder[pl]==inorder[k]){
                root->left = constructTree(preorder,pl+1,pl+k-il,inorder,il,k-1);
                root->right = constructTree(preorder,pl+k-il+1,pr,inorder,k+1,ir);
            }
        }
        return root;
    }
};

相關推薦

[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

LeetCode105:從前序列構造

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

LeetCode105. 從前序列構造

題目分析:根據前序的第一個節點就可以確定二叉樹的根節點,然後在中序序列中找到該節點。位於該節點左側的是根節點的左子樹,位於該節點右側的是根節點的右子樹。然後根據左右子樹節點的數量可以在前序序列中知道各自子樹的前序序列。假設左子樹節點的數量為3,那麼除了前序的第一個節點,往後數

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] 中序遍歷

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

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

Leetcode---從前序列構造--思路

從前序與中序遍歷序列構造二叉樹 題目連結:從前序與中序遍歷序列構造二叉樹 解題思路: 從遍歷序列構造二叉樹時,必須包含有中序遍歷,先序和後序是構造不了的 方法:首先找先序的第一個節點,它一定是樹的根節點,然後在中序序列中找到該節點的位置,左邊即為該節點的左子樹遍歷序

105. 從前序列構造

思路:遞迴,易知前序的第0號元素為樹的根,在中序裡找這個根,然後以該根為界將中序陣列劃分成左右兩半,依次遞迴進行。難點在於每次還要根據中序的劃分來將前序陣列也劃分。 # Definition fo

【LeetCode】105. 從前序列構造 結題報告 (C++)

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

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

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

Leetcode 105:從前序列構造(最詳細的解法!!!)

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

105,從前序列構造

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

LeetCode105題:從前序列構造

思路:  首先要清楚二叉樹的前序遍歷和中序遍歷的過程。所謂的前序遍歷,其遍歷順序為:當前節點-->左子樹-->右子樹;而中序遍歷的遍歷順序為:左子樹-->當前節點-->右子樹。因此,中序遍歷序列中某一節點的左右兩側則分別為其左右子樹。這樣思路就出來了,

Leetcode中級 從前序列構造C++

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

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

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

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

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

LeetCode題解--105. 從前序列構造

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

leetcode: 105. 從前序列構造

code col leetcode 分塊 前序 ESS ges 一個 序列 從圖中看出的最重要的一點是前序序列怎末劃分成兩部分。其實可以先在中序中找出左邊有n個元素,然後前序除了第一個頭節點之後的n個元素就是左子樹上的前序序列。另外的就是右子樹的前序序列。 註意上圖中

leetcode 105. 從前序列構造(Construct Binary Tree from Preorder and Inorder Traversal)

cpp 根據 描述 沒有 etc pre flow fir cout 目錄 題目描述: 示例: 解法: 題目描述: 根據一棵樹的前序遍歷與中序遍歷構造二叉樹。

【leetcode 105. 從前序列構造】解題報告

nullptr treenode ref != 圖片 lan size htm amp 前往 中序,後序遍歷構造二叉樹, 中序,前序遍歷構造二叉樹 TreeNode* build(vector<int>& preorder, int l