leetcode 114 二叉樹展開為鍊錶

2021-10-08 14:31:56 字數 1524 閱讀 3075

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

例如,給定二叉樹

1/ \

2   5

/ \   \

3   4   6

將其展開為:1\

2\3\

4\5\

6

# definition for a binary tree node.

# class treenode(object):

# def __init__(self, val=0, left=none, right=none):

# self.val = val

# self.left = left

# self.right = right

class solution(object):

def flatten(self, root):

""":type root: treenode

:rtype: none do not return anything, modify root in-place instead.

"""if not root:

return

self.flatten(root.left)

self.flatten(root.right)

temp = root.right

root.right = root.left

root.left = none

while root.right != none:

root = root.right

root.right = temp

return

對於每乙個節點而言,他們需要做的事情是一樣的,即我們可以使用遞迴的方式來解這道題。每個節點的左子節點應該是已經排好序的鍊錶,右子節點也是排好序的列表,所以要做的就是把左邊的鍊錶插入到右邊,並把左邊的節點設定為空。最後我們需要乙個臨時變數來儲存右子節點。

class solution(object):

def flatten(self, root):

""":type root: treenode

:rtype: none do not return anything, modify root in-place instead.

"""if not root:

return

stack = [root]

prev = none

while stack:

node = stack.pop()

if prev:

prev.left = none

prev.right = node

if node.right:

if node.left:

prev = node

可以使用輔助棧模擬遞迴,由於是前序遍歷,所以需要先把根節點pop出來,然後再將右子節點和左子節點先後壓入棧中。此外我們需要乙個中間變數prev用來儲存前乙個節點,這樣就能保證前乙個節點能按順序指向當前節點。

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