非原地操作 114 二叉樹展開為鍊錶

2021-10-08 18:59:36 字數 1069 閱讀 6022

給定乙個二叉樹,原地將它展開為乙個單鏈表。

例如,給定二叉樹

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 將根節點和其右子節點斷開,把原右子節點連到原...