leetcode 114 二叉樹展開為鍊錶

2021-09-29 08:49:55 字數 2251 閱讀 9471

給定乙個二叉樹,原地將它展開為鍊錶。

例如,給定二叉樹

1

/ \2 5

/ \ \

3 4 6

將其展開為:

1

\ 2\3

\4\5

\6

無腦版:前序遍歷二叉樹,然後再依次展開。時間複雜度是o(n

)o(n)

o(n)

,空間複雜度也是o(n)

別人的思路:如果乙個節點有左子樹,就把右子樹掛到左子樹最右邊的節點右子樹上。時間複雜度同上,空間複雜度為o(1)

具體實現時,首先看當前節點是否有左子樹,如果有,找到左子樹的最右邊節點,然後把當前節點的右子樹掛到最右節點的右子樹上,然後將當前節點的左子樹放到當前節點的右子樹上。這樣當前節點就已經變完了,下一步讓cur_node = cur_node.right,繼續即可。

無腦版:

非遞迴版的前序遍歷,其實不用記錄stat,直接訪問節點即可。

# 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.

"""ifnot root:

return

stack =

[root]

preorder =

while stack:

p = stack.pop(

)if p.right:

if p.left:

for index in

range

(len

(preorder)):

preorder[index]

.left =

none

if index +

1<

len(preorder)

: preorder[index]

.right = preorder[index +1]

else

: preorder[index]

.right =

none

改進版:

# 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.

"""cur_node = root

while cur_node:

if cur_node.left:

# find rightest node

right_node = cur_node.left

while right_node.right:

right_node = right_node.right

right_node.right = cur_node.right

cur_node.right = cur_node.left

cur_node.left =

none

cur_node = cur_node.right

leetcode114 二叉樹展開為鍊錶

給定乙個二叉樹,原地將它展開為鍊錶。先把左右展開,右放左最後,左放右,左置空 definition for a binary tree node.class treenode def init self,x self.val x self.left none self.right none clas...

Leetcode 114 二叉樹展開為鍊錶

給定乙個二叉樹,原地將它展開為鍊錶。例如,給定二叉樹 1 2 5 3 4 6 複製 將其展開為 1 2 3 4 5 6 複製 這算是比較經典的一道題目了,博主面試快手的時候原題。最開始一想,覺得遞迴的求解不就好了,但是遞迴的時候發現需要注意乙個地方就是 需要先遞迴右子樹,然後記錄下右子樹展開完成之後...

leetcode 114 二叉樹展開為鍊錶

給定乙個二叉樹,原地將它展開為鍊錶。例如,給定二叉樹 1 2 5 3 4 6將其展開為 1 2 3 4 5 6採用二叉樹後序遍歷 python 如下 class treenode object def init self,x self.val x self.left none self.right ...