第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

LeetCode 114. 二叉樹(shù)展開(kāi)為鏈表 | python

標(biāo)簽:
Python 算法

114. 二叉树展开为链表


题目


给定一个二叉树,原地将它展开为一个单链表。

例如,给定二叉树

1  
/ \  
2 5  
/ \ \  
3 4 6  

将其展开为:

1  
\  
2  
\  
3  
\  
4  
\  
5  
\  
6  

解题思路


思路: 递归,非递归

递归

我们先观察例子,可以发现,左子树展开成链表连接在根节点,而右子树展开链表是紧跟在左子树展开的链表后面。这里使用递归的方法来解决。

使用后序遍历(递归)的具体做法:

  • 先找到左子树的最右节点;
  • 当找到左子树的最右节点时,令其指向根的右子树;
  • 此时,再让根的右子树,指向根节点的左子树;
  • 最后,令根节点的左子树为 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.  
"""  
def unflod(node):  
if not node:  
return None

unflod(node.left)  
unflod(node.right)

# 后序遍历  
if node.left:  
pre = node.left  
# 找到左子树的最右子节点,用以连接根的右子树  
while pre.right:  
pre = pre.right  
# 当找到左子树的最右子节点,令其指向根的右子树  
pre.right = node.right  
# 然后令根的右子树指向根的左子树,令根的左子树为空  
node.right = node.left  
node.left = None  
# 循环  
node = node.right

unflod(root)

# 非递归  
# 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.  
"""  
while root:  
if root.left:  
pre_node = root.left  
# 同样先找到左子树的最右节点  
while pre_node.right:  
pre_node = pre_node.right  
# 最右节点指向根节点的右子树  
pre_node.right = root.right  
# 根的右子树指向根的左子树,同时置空左子树  
root.right = root.left  
root.left = None  
root = root.right  

实现结果


实现结果 | 递归

实现结果|递归

实现结果 | 非递归

实现结果 | 非递归

點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消