一、题目描述
这是一个简单难度的有关树的题,题目描述为给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
二、思路解析
这很容易用到拆分重组思想,首先将树按照中序遍历将结点都提取出来,然后将结点进行重新建树,这需要一个媒介,在java中这个媒介就是可以是List集合,即用List存储按中序排序提取出来的结点,然后按照要求进行排序。这里注意List定义语句是List vals=new ArrayList()。
三、代码解析
按照思路我们就应该如下进行代码的书写,首先定义一个List集合,再中序遍历将结点提取出来存在List中,然后将结点按照要求进行重新建树,代码如下所示:
class Solution{
public Treenode increasingBST(TreeNode root){
List<Integer> vals=new ArrayList();
inorder(root,vals);
TreeNode ans=new TreeNode(0),cur=ans;
for(int v:vals){
cur.right=new TreeNode(v);
cur=cur.right;}
return ans.right;
}
public void inorder(TreeNode node,List<Integer>vals){
if(node==null)
return;
inorder(node.left,vals);
vals.add(node.val);
inorder(node.right,vals);
}
}
四、 总结
这是一道简答的有关树的应用题,通过对相关数据结构的正确使用,即可完成对题目的编写。