第二十天|654. 最大二叉树
654_题目关键字:二叉树,递归,前序构造二叉树
654_题目链接
代码实现
package LeetCode;
import java.util.ArrayList;
import java.util.List;
public class YangSibo_654 {
public static void main(String args []){
int nums [] = {3,2,1,6,0,5};
YangSibo_654_1 demo = new YangSibo_654_1();
TreeNode result = demo.constructMaximumBinaryTree(nums);
System.out.println(result.val);
}
}
class YangSibo_654_1 {
public TreeNode constructMaximumBinaryTree(int[] nums) {
ArrayList<Integer> transnums = new ArrayList<>();
for (int num:nums) {
transnums.add(num);
}
return orderTree(transnums);
}
public TreeNode orderTree (List<Integer> nums){
if(nums.size() == 0) {
return null;
}
int maxindex = getMaxvalue(nums);
TreeNode temp = new TreeNode(nums.get(maxindex));
List<Integer> left = nums.subList(0,maxindex);
temp.left=orderTree(left);
List<Integer> right = nums.subList(maxindex+1,nums.size());
temp.right=orderTree(right);
return temp;
}
public int getMaxvalue (List<Integer> nums){
int maxvalue = Integer.MIN_VALUE;
int maxvalueindex = 0;
for (int i=0;i< nums.size();i++){
if (nums.get(i) > maxvalue) {
maxvalue = nums.get(i);
maxvalueindex = i;
}
}
return maxvalueindex;
}
}
解题注意事项
1、前序遍历构造二叉树
2、合理使用LIst<>及其方法subList
3、明确根据索引下标划分左右树