1. 程式人生 > >python實現劍指offer系列:重建二叉樹

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 {

pythonoffer系列對稱的

題目:請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。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)中二叉樹以及列印結果為: 這個題其實很簡單,我們只需要設定兩個變數就可以搞定。一個變量表示當前層中還沒有