給定乙個二叉樹,原地將它展開為乙個單鏈表。
例如,給定二叉樹
1/ \
2 5
/ \ \
3 4 6
將其展開為:1 \
2 \3\
4\5\
6
將乙個二叉樹給它拆開,拆成鍊錶。其實這個題目要求是原地操作,也就是時間複雜度是o(1)。但是原地操作我沒看明白,所以用了乙個o(n)的方法去解決這個問題。可以進行先序的遍歷操作,然後把結構存放起來,在構建乙個二叉樹就可以了。
# definition for a binary tree node.
# class treenode:
# def __init__(self, val=0, left=none, right=none):
# self.val = val
# self.left = left
# self.right = right
class solution:
def flatten(self, root: treenode) -> none:
"""do not return anything, modify root in-place instead.
"""if not root:return root
d =
def helper(root):
if not root:
return
helper(root.left)
helper(root.right)
helper(root)
i = 1
#令左子樹為空
root.left = none
p = root
while i < len(d):
p.right = treenode(d[i])
p = p.right
i += 1
總結:複習了二叉樹的前序遍歷;但是沒有達到題目要求的原地操作。 114 二叉樹展開為鍊錶
首先是原地演算法的定義 演算法原地工作的含義是指不需要任何額外的輔助,演算法所需要的輔助空間不隨著問題的規模而變化,是乙個確定的值。通過觀察示例可以知道,我們可以猜想,大方向是前序遍歷。第一種思路 dfs。設定乙個全域性的指標 這種做法有點脫離原地演算法,因為多開闢了乙個指標變數 核心思想是拿到乙個...
114 二叉樹展開為鍊錶
一開始寫的 114 二叉樹展開為鍊錶 definition for a binary tree node.class treenode def init self,x self.val x self.left none self.right none class solution def flatt...
114 二叉樹展開為鍊錶
給定乙個二叉樹,原地將它展開為鍊錶。例如,給定二叉樹 1 2 5 3 4 6將其展開為 1 2 3 4 5 6思路 從題目可以看出來要求先根遍歷。從根節點開始出發,先檢測其左子結點是否存在 1 找到左子結點最後面的右子節點 如果沒有,就是左子節點本身 2 將根節點和其右子節點斷開,把原右子節點連到原...