lintcode練習 453 將二叉樹拆成鍊錶

2021-08-26 18:13:31 字數 1180 閱讀 7901

將一棵二叉樹按照前序遍歷拆解成為乙個假鍊錶。所謂的假煉表是說,用二叉樹的 right 指標,來表示鍊錶中的 next 指標。

1

\1 2

/ \ \

2 5 => 3

/ \ \ \

3 4 6 4\5

\6

不使用額外的空間耗費。

不要忘記將左兒子標記為 null,否則你可能會得到空間溢位或是時間溢位。

分析:本題採用遞迴的方法解決,關鍵是要知道由左子樹轉化的鍊錶的頭和尾,以及由右子樹轉化的鍊錶的頭和尾。頭一定是二叉樹的根節點,尾是右子樹的尾(如果右子樹不空)或者左子樹的尾(如果右子樹空,左子樹不空)或者根(如果左右子樹都是空)。

"""

definition of treenode:

class treenode:

def __init__(self, val):

self.val = val

self.left, self.right = none, none

"""class solution:

"""@param root: a treenode, the root of the binary tree

@return: nothing

"""def flatten(self, root):

# write your code here

self.dfs(root)

def dfs(self, node):

if not node:

return node

last_left = self.dfs(node.left)

last_right = self.dfs(node.right)

if last_left:

last_left.right = node.right

node.right = node.left

node.left = none

if last_right:

return last_right

if last_left:

return last_left

return node

lintcode 453 將二叉樹拆分成鍊錶

1.將一棵二叉樹按照前序遍歷拆解成為乙個假鍊錶 所謂的假煉表是說,用二叉樹的 right 指標,來表示鍊錶中的 next指標 2.將一棵二叉樹遍歷然後存到一棵樹裡,這棵樹是斜樹,所有節點的左子樹都是null 3.definition of treenode class treenode class ...

453 將二叉樹拆成鍊錶

3.30 即使昨天聯絡了半天的二叉樹的基本操作,今天做起題目來依舊不順手。想著邊遍歷邊修改左右子樹,但是好像不太現實。只好把先序遍歷的結果存在queue中 然後再遍歷queue,再修改子樹。definition of treenode public class treenode public cla...

lintcode練習 490 棧集

假如你有一堆的盤子。如果你堆得太高的話,就可能會垮掉。所以,在真實的生活中,如果盤子疊到一定高度,你會重新開始堆新的一堆盤子。實現這樣的乙個資料結構,我們稱之為棧集,來模擬這個過程。這個棧集包含若干個棧 可以理解為若干堆的盤子 如果乙個棧滿了,就需要新建乙個棧來裝新加入的項。你需要實現棧集的兩個方法...