二叉树定义
# 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
897. Increasing Order Search Tree - 增序二叉搜索树
Given a binary search tree, rearrange the tree in in-order so that the leftmost node in the tree is now the root of the tree, and every node has no left child and only 1 right child.
Example 1:
Input: [5,3,6,2,4,null,8,1,null,null,null,7,9]
5
/ \
3 6
/ \ \
2 4 8
/ / \
1 7 9
Output: [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
Constraints:
- The number of nodes in the given tree will be between 1 and 100.
- Each node will have a unique integer value from 0 to 1000.
Solution:
class Solution:
def increasingBST(self, root: TreeNode) -> TreeNode:
dummy_ret = TreeNode()
def recursive_iot(root, node):
if root is None:
return node
ret = recursive_iot(root.left, node)
ret.right = TreeNode(root.val)
ret = ret.right
ret = recursive_iot(root.right, ret)
return ret
recursive_iot(root, dummy_ret)
return dummy_ret.right
这一题感觉挺有意义的,是中序遍历的变体,在解决这道题的前提,就是对二叉树三种遍历的至少递归写法要很熟练。
然后针对题目要求,不是返回遍历 value 返回列表,而是遍历 value 重新构建一颗二叉树,这样的如何返回值等等方面就稍微需要多思考一点点。合理的变体,多考察了一点点能力。所以很值得记录一下。
Submission: