leetcode刷题_PYTHON(11):链表(11)二叉树展开为链表

给你二叉树的根结点 root ,请你将它展开为一个单链表:

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。

 

 

# 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 dfs(node):
            if not node:
                return
            dfs(node.left)
            dfs(node.right)
            if node.left:
                # 取该节点的左子树
                temp = node.left
                # 取该左子树的最右子树
                while temp.right:
                    temp = temp.right
                # 最右子树的右子树为node的右子树
                temp.right = node.right
                # 将node的左子树移到右子树上
                node.right = node.left
                node.left = None
                            
        dfs(root)
        return root

作者:zhsama
链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/solution/dfsda-bai-99-by-zhsama-il4r/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

posted @ 2021-09-12 18:55  秋华  阅读(58)  评论(0)    收藏  举报