將一棵二叉樹按照前序遍歷拆解成為乙個假鍊錶
。所謂的假煉表是說,用二叉樹的 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 棧集
假如你有一堆的盤子。如果你堆得太高的話,就可能會垮掉。所以,在真實的生活中,如果盤子疊到一定高度,你會重新開始堆新的一堆盤子。實現這樣的乙個資料結構,我們稱之為棧集,來模擬這個過程。這個棧集包含若干個棧 可以理解為若干堆的盤子 如果乙個棧滿了,就需要新建乙個棧來裝新加入的項。你需要實現棧集的兩個方法...