二叉树展开为链表Python解法

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list
 

例:

二叉树展开为链表Python解法_第1张图片

输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]

解析:

将右子树储存起来,左子树替换到右子树,然后将左子树置空,存储起来的前右子树嫁接到新右子树的右子节点上。然后根节点像右子树遍历即可,直至为空。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def flatten(self, root):
        """
        :type root: TreeNode
        :rtype: None Do not return anything, modify root in-place instead.
        """
        if not root:
            return []  # 空树
        while root:  # 遍历停止条件
            if root.left:  # 左子树存在
                temp = root.right  # 存储右子树
                root.right = root.left  # 将左子树移到右子树的位置
                root.left = None  # 左子树置空
                h = root.right  # “嫁接”点指针
                while h.right:  # 找寻“嫁接”点
                    h = h.right  
                h.right = temp  # 进行“嫁接”
            root = root.right  # 向下遍历

你可能感兴趣的:(Python,leetcode,python)