劍指offer-----重建二叉樹(java版)
一 題目
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
二 例子
輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。
三 思路
根據前序遍歷可以知道二叉樹的根為1,所以中序遍歷中前3個是根的左子樹,1的後面元素是根的右子樹,可以看到,前序遍歷的1(根)的後3個是根的左子樹,後4個是根的右子樹,所以程式一開始應該找到中序遍歷樹的根位置,然後遞迴構建二叉樹。以根作為標準,以中序遍歷左側n個元素與前序遍歷除根之外的前n個元素進行左子樹構建,以中序遍歷右側n個元素與前序遍歷除根之外的後n個元素進行右子樹構建。
四 程式原始碼
import java.util.Arrays;
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre.length==0 || in.length==0)
return null;
TreeNode node = new TreeNode(pre[0]);
for(int i=0;i<pre.length;i++){
if(pre[0] == in[i]){
node.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1),Arrays.copyOfRange(in,0,i));
node.right = reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length),Arrays.copyOfRange(in,i+1,in.length));
break;
}
}
return node;
}
}
相關推薦
劍指offer-----重建二叉樹(java版)
一 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。 二 例子 輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列
劍指Offer——重建二叉樹
urn return 重復 col 分割 init 樹的遍歷 ++ fin 題目描述: 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,
劍指offer--重建二叉樹
lag node rec 劍指offer == str eno truct 個數字 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4
劍指offer ——重建二叉樹
數字 分析 nal nod 遍歷 中序遍歷 i++ algorithm vector p62 輸入前序和中序遍歷的結果(不包含重復的數字),重建二叉樹。 主要是分析兩個序列的規律,然後用遞歸的方式找到每一個根節點,從而完成構建。 #include<iostream&
劍指offer - 重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 每顆子樹的根節點肯定
劍指offer[重建二叉樹]
劍指offer[重建二叉樹] 題目描述 思路 程式碼 細節知識 題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列
[python版]劍指offer -- 重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 程式碼實現 # -*- codi
劍指offer------重建二叉樹
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 思路 通常樹有如下幾種遍歷
劍指offer 重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,
牛客網刷題--劍指offer(重建二叉樹)
題目描述是這樣的: 給你一個樹的前序遍歷和中序遍歷,希望你能重建這個二叉樹的結構,題目還給了一個例子:某二叉樹的前序遍歷為{1, 2, 4, 7, 3, 5, 6, 8}和中序遍歷{4, 7, 2, 1, 5, 3, 8, 6},重建二叉樹並返回該二叉樹的根
劍指offer----重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 //get
劍指offer-重建二叉樹
題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。解題:仔細觀察重建二叉樹,前序遍歷
day16劍指offer---重建二叉樹
題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸出的前序遍歷和中序遍歷的結果都不含有重複的數字。前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5 二叉樹節點的定義如下: struct TreeNode {
【劍指Offer】- 重建二叉樹[Java版]
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 /** * Created by
【Java】 劍指offer(27) 二叉樹的鏡像
.cn tree 解釋 問題 true mir 形象 收獲 ror 本文參考自《劍指offer》一書,代碼采用Java語言。 更多:《劍指Offer》Java實現合集 題目 請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像。 思路 畫圖可以很清晰地
【劍指offer】二叉樹中和為某一值得路徑 java
路徑為從根節點到葉節點一條路徑,路徑經過的各節點數值之和等於某一給定數值,則列印路徑上的節點 因為需要列印滿足條件的路徑節點資訊和各節點之和,需要棧記錄經過的節點,和一個儲存數值之和的變數用前序遍歷
劍指offer:判斷二叉樹是不是平衡二叉樹(java)
題目:輸入一棵二叉樹的根節點,判斷該樹是不是平衡的二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。 有了求二叉樹的深度的經驗之後再解決這個問題,我們很容易就能想到一個思路:在遍歷樹的每個結點的時候,呼叫函式TreeDepth得到
劍指Offer-根據二叉樹的前序和後序遍歷重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。 * 假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。 * 例如輸入前序遍歷序列{1,2,4,7,3,5,6,8} * 和中序遍歷序列{4,7,2,1,5,3,8,6}, * 則重建二叉樹並返回/*思
劍指offer之 二叉樹鏡像
tno eno 描述 temp 結點 輸出 urn tree 定義 package Problem19; /* * 問題描述: * 請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像; */ //定義二叉樹的結構 class BinaryTreeNode {
劍指Offer——把二叉樹打印成多行
blog queue 隊列 int 利用 vector ont str logs 題目描述: 從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 分析: 二叉樹的層次遍歷,利用隊列。 代碼: 1 /* 2 struct TreeNode { 3