Leetcode P654 dfs解法
解题思路,每次循环都在规定的范围内查找最大的值,每次找到最大的值都将index赋值为最大值的下标,每个节点的左节点的位置定位是[l,index-1],因为在[index+1,r]还可能会出现大于[l,index-1]区间的数字的树,每个节点的右节点的范围是[index+1,r],如果我们的l大于了r那么就代表没有符合的数字,就返回null。
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return dfs(nums,0,nums.length-1);
}
public TreeNode dfs(int[] num,int l,int r){
//没有符合的数字,直接返回null
if (l > r){
return null;
}
//用来保存最大值的下标,默认L下标是最大值
int index = l;
//查看在规定的范围内是否还存在大于此数的数字,如果有就保存她的下标
for (int i = l + 1; i <= r; i++) {
if (num[i] > num[index]){
index = i;
}
}
//创建该节点
TreeNode node = new TreeNode(num[index]);
//该节点的左节点的查找范围在[L,index-1],为什么在这个范围是因为[index+1,r]还有可能出现比[L,index-1]范围大的数字
node.left = dfs(num,l,index-1);
//该节点的右节点的查找范围在[index+1.r]是因为该范围可能会出现比[L,index-1]范围大的数字
node.right = dfs(num,index+1,r);
return node;
}
}