二叉树 Leetcode 897 递增顺序查找树

题目

给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。

示例 :

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

   5
  / \
3    6

/ \
2 4 8
/ / \
1 7 9

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

1

2

3

4

5

6

7

8

9

提示:

给定树中的结点数介于 1 和 100 之间。
每个结点都有一个从 0 到 1000 范围内的唯一整数值。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/increasing-order-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

  • 使用递归获得中序遍历值
  • 从头开始建树

代码

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def increasingBST(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        def inorder(root):
            if not root:
                return None
            res = []
            
            if root.left:
                res.extend(inorder(root.left))
            res.append(root.val)
            
            if root.right:
                res.extend(inorder(root.right))
            
            return res
        
        res = inorder(root)
        head = curr = TreeNode(0)
        
        for t in res:
            curr.right = TreeNode(t)
            curr = curr.right
        
        return head.right

你可能感兴趣的:(二叉树 Leetcode 897 递增顺序查找树)