leetcode_897 递增顺序搜索树

771 阅读1分钟

要求

给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。

示例 1:

image.png

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

示例 2: image.png

输入:root = [5,1,7]
输出:[1,null,5,null,7]

核心代码


class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
class Solution:
    def increasingBST(self, root: TreeNode) -> TreeNode:
        preorder = list()

        def pre_order(root):
            if not root:
                return 
            pre_order(root.left)
            preorder.append(root.val)
            pre_order(root.right)
        
        pre_order(root)

        dummp = TreeNode(0)
        for i,node in enumerate(preorder):
            temp = TreeNode(node)
            temp.left = None
            temp.right = None
            if i == 0:
                dummp.right = temp
                cur = temp
            else:
                cur.right = temp
                cur = temp
        return dummp.right

image.png

解题思路:我们使用中序遍历得到了一个顺序的列表,接下来我们按照要求构建一个全右的树。