python實現劍指offer系列:重建二叉樹
題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。
程式碼:
class Node:
def __init__(self, data, left, right):
self.data = data
self.left = left
self.right = right
def construct_tree(pre_order, mid_order):
#
if len(pre_order) == 0 or len(mid_oder) ==0 :
return None
# 前序遍歷的第一個結點一定是根結點
root_data = pre_order[0]
for i in range(0, len(mid_order)):
if mid_order[i] == root_data:
break
# 遞迴構造左子樹和右子樹
left = construct_tree(pre_order[1 : 1 + i], mid_order[:i])
right = construct_tree(pre_order[1 + i:], mid_order[i+1 :])
return Node(root_data, left, right)
if __name__ == '__main__':
pre_order = [1, 2, 4, 7, 3, 5, 6, 8]
mid_order = [4, 7, 2, 1, 5, 3, 8, 6]
root = construct_tree(pre_order, mid_order)
相關推薦
python實現劍指offer系列:重建二叉樹
題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 程式碼: cl
劍指offer(4):重建二叉樹
turn return null ptr 不存在 n) 地址 iterator eno 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,
劍指 Offer - 4:重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列 {1,2,4,7,3,5,6,8} 和中序遍歷序列 {4,7,2,1,5,3,8,6},則重建二叉樹並返回 題目連結:http
劍指offer-04:重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 public class Solution04 {
python劍指offer系列對稱的二叉樹
題目:請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。solution:/*思路:首先根節點以及其左右子樹,左子樹的左子樹和右子樹的右子樹相同* 左子樹的右子樹和右子樹的左子樹相同即可,採用遞迴程式碼:# -*-
【劍指Offer】16重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 時間限制:1秒;空間限制:32768K
劍指offer-39:平衡二叉樹
題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 思路 首先,什麼是平衡二叉樹?如果二叉樹中任意結點的左右子樹深度相差不超過1,那麼它就是平衡二叉樹。 最直接的做法,遍歷每個結點,藉助一個獲取樹深度的遞迴函式,根據該結點的左右子樹高度差判斷是否平衡,然後遞迴地對左右子樹進
(C++)劍指offer-60:把二叉樹列印成多行(樹)
劍指offer-60:把二叉樹列印成多行 目錄 1題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 2解析及答案 層次遍歷 跟上一題一樣,將奇偶行去掉
【劍指offer】對稱的二叉樹【python】
請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。 class TreeNode: def __init__(self, x):
劍指offer--面試題25:二叉樹中和為某一值的路徑--Java實現
題目描述: 輸入一課二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 解題思路: 先模擬一下過程:樹的結構如下所示,期待路徑的和為22 10→5→4是一條路徑,它們的和不是22
劍指offer十八之二叉樹的鏡像
img ret code 如果 close http span coder view 一、題目 操作給定的二叉樹,將其變換為源二叉樹的鏡像。二叉樹的鏡像定義: 源二叉樹 : 8 / 6 10
【劍指offer】8、二叉樹中序遍歷的下一個節點
pan color col amp nullptr nbsp 父節點 public turn 題目 給定一個二叉樹和其中一個節點,找出中序遍歷的下一個節點。註意:樹的節點中除了有指向左右節點的指針,還有指向父節點的指針。 思路 (1)若該節點Node有右子樹,則下一個節點就
劍指offer(57)二叉樹的下一個節點
需要 div 2種 color 節點 兩種 我們 cti 指向 題目描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。註意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。 題目分析 這題一定要畫圖,因為只有畫圖我們才能分清楚下一個節
劍指offer 58. 對稱的二叉樹
題目描述 請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。 思路: 二叉樹映象相同是對稱的,利用遞迴做。 參考答案: # -*- coding:utf-8 -*- # class TreeNode: #
劍指offer——(14)二叉樹的映象(交換二叉樹)
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.va
劍指offer演算法題001 -- [二叉樹的映象] by java
程式執行截圖: import java.util.HashMap; public class Algorithm1 { /* [二叉樹的映象] [題目] 操作給定
牛客網《劍指Offer》 程式設計 23. 二叉樹的後序遍歷序列
題目描述 輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。 解題思路 二叉搜尋樹的特點:後序遍歷的時候最後一個數是根節點。前面的數分為兩個部分,本別是左子樹部分和右子樹部分。左子樹
劍指offer-------之字列印二叉樹
題目: 思路: 程式碼: struct TreeNode { int val; TreeNode *left; TreeNode *right; } void Print(BinaryTreeNOde* pRoot) { if(pRoot ==
【劍指offer】給定一個二叉樹,將其變換為源二叉樹的映象
題目要求 給定一個二叉樹,將其變換為源二叉樹的映象。 核心思想 遞迴思想,分治呼叫。 完整程式碼如下 public class Solution { public class TreeNode { int val; TreeNode left; TreeNo
《劍指offer》:[60]把二叉樹列印成多行
題目:從上到下安層列印二叉樹,同一層的結點按從左到右的順序列印,每一層列印一行。例如,圖(1)中二叉樹以及列印結果為: 這個題其實很簡單,我們只需要設定兩個變數就可以搞定。一個變量表示當前層中還沒有