difficulty:中等
給定乙個二叉樹,將它展開為乙個單鏈表。
例如,給定二叉樹
1
/ \2 5
/ \ \
3 4 6
將其展開為:
1
\ 2\3
\4\5
\6
solution
language:全部題目
右左根序遍歷(rld),這個遞迴的過程比較難理解,英文區有乙個使用者畫出了rld遍歷的過程,可以參考一下。
1
/ \2 5
/ \ \
3 4 6
-----------
pre = 5
cur = 41/
2
/ \
3 4\5
\6
-----------
pre = 4
cur = 31/
2
/
3 \
4 \5\
6-----------
cur = 2
pre = 31/
2 \3
\4\5
\6
-----------
cur = 1
pre = 21 \
2 \3\
4\5\
6
# 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:
prev = none
def flatten(self, root: treenode) -> none:
"""do not return anything, modify root in-place instead.
"""if not root: return
# rld(右左根序遍歷)
self.flatten(root.right)
self.flatten(root.left)
root.right = self.prev
root.left = none
self.prev = root
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 ...