897. Increasing Order Search Tree (Python)
Related Topic
Description
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.
Sample I/O
Example 1
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.
Methodology
Use DFS to append all tree node value into array in inorder. Then build a new tree with all nodes on the right.
Code
def increasingBST(self, root: TreeNode) -> TreeNode:
if not root:
return
def inOrder(root, res):
if not root:
return
inOrder(root.left, res)
res.append(root.val)
inOrder(root.right, res)
return res
array = inOrder(root, [])
root = cur = TreeNode(array[0])
for i in range(1, len(array)):
cur.right = TreeNode(array[i])
cur = cur.right
return root
BigO
Time complexity: O(n) where n is the number of the nodes of both trees.