leetcode中等114二叉树展开为链表
Posted qq_40707462
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等114二叉树展开为链表相关的知识,希望对你有一定的参考价值。
思路一:递归先序遍历
中左右,即把左放在右的位置,再把右接在左的下面
# 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 or (not root.left and not root.right):
return
#处理左右子树
self.flatten(root.left)
self.flatten(root.right)
#中左右---中,把左放在右,把右放在左下面
tmp=root.right
root.right=root.left
root.left=None
#找到新树右的末尾,把原右(tmp)接在后面
while(root.right):
root=root.right
root.right=tmp
思路二:非递归
# 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.
"""
stack=[]
while root or stack:
if root:
stack.append(root)
root=root.left
else:
node=stack.pop()
tmp=node.right
root=tmp
#以上是前序遍历,以下是每个结点处的操作
node.right=node.left
node.left=None
while node.right:
node=node.right
node.right=tmp
以上是关于leetcode中等114二叉树展开为链表的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记— 114. 二叉树展开为链表
LeetCode Java刷题笔记— 114. 二叉树展开为链表