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中等114二叉树展开为链表

LeetCode Java刷题笔记— 114. 二叉树展开为链表

LeetCode Java刷题笔记— 114. 二叉树展开为链表

LeetCode114 二叉树展开为链表 ---二叉树题 三种解法 (递归) (迭代) (前驱节点)

Leetcode 114.二叉树展开为链表

LeetCode第114题—二叉树展开为链表—Python实现