题目描述
给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
样例
示例1:
输入: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:
输入:root = [5,1,7]
输出:[1,null,5,null,7]
思路
呜呜呜为什么要调休,愉快的周末还要写题暴风哭泣
- 这题按照题目定义的树节点给定一棵BST,然后需要把这棵BST按照递增的顺序组成一颗形似链表的树。
- 对于BST,对其进行中序遍历,得到的序列就是有序的递增序列。我们只要对该树进行中序遍历,将节点数值存储在一个列表中,然后根据该列表重建新的树即可~
代码
class Solution {
public TreeNode increasingBST(TreeNode root) {
List<Integer> lst = new ArrayList<Integer>();
Inorder(root,lst);
if(lst.isEmpty())
return null;
TreeNode root2 = new TreeNode(lst.get(0),null,null);
TreeNode pre,pt;
pre = root2;
for(int i = 1;i < lst.size();i++) {
pt = new TreeNode(lst.get(i),null,null);
pre.right = pt;
pre = pt;
}
return root2;
}
//中序遍历
private void Inorder(TreeNode t,List<Integer> lst) {
if(t == null)
return;
Inorder(t.left,lst);
lst.add(t.val);
Inorder(t.right,lst);
}
}