题目详情


题目详情链接

一、解题思路

将原树进行中序遍历将树中的节点的非空值放入到一个 list 集合中,创建一棵新树然后通过递归的方式将不断生成的新的右子树直到集合遍历完。

二、使用步骤

1
2
3
1.对原树进行中序遍历。将非空树的值一次放入到List集合中。
2.创建一个函数用于对集合进行遍历,将每次遍历得到的值用来创建当前树的值。
在集合遍历完之前,继续递归该函数,将传递的实参改为当前树的右子树。

三、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution {
public TreeNode increasingBST(TreeNode root) {
if(root!=null){
ArrayList array=new ArrayList<>();
Solution s=new Solution();
s.inOrderTraversal(root,array);
root=s.toTree(null,array,0);
return root;
}else{
return null;
}
}
//通过递归的方式不断将集合中的值有做新的右子树的值
public TreeNode toTree(TreeNode root,List<Integer> array,int length){
root=new TreeNode(array.get(length));
root.left=null;
if(length<array.size()-1){
length++;
root.right=toTree(root.right,array,length);
}
return root;
}

//中序遍历
public void inOrderTraversal(TreeNode root,List<Integer> array){
if(root==null){
return ;
}else{
inOrderTraversal(root.left,array);
array.add(root.val);
inOrderTraversal(root.right,array);
}
}
}

总结

在我看来树的重点需要掌握的就是树的遍历方式。前序、中序、后序、层序。基本上许多和树有关的题目都会涉及到他的遍历方式。这些方式都可以通过递归的方式来实现。