2024.2.26
- 题目来源
- 我的题解
- 方法一 深度搜索(中序遍历)
- 方法二 广度搜索(层序遍历)
题目来源
力扣每日一题;题序:938
我的题解
方法一 深度搜索(中序遍历)
利用二叉搜索树中序遍历是升序的特点,在中序遍历过程中进行截断。若当前节点小于等于最小值,则不可能再访问左子树;若当前节点大于等于最大值,则不可能再访问右子树。然后判断遍历的当前节点值是否在有效范围内。
时间复杂度:O(n)
空间复杂度:O(n)
int sum=0;
public int rangeSumBST(TreeNode root, int low, int high) {inOrder(root,low,high);return sum;
}
public void inOrder(TreeNode root,int low,int high){if(root==null)return ;//若当前节点小于等于最小值,则不可能再访问左子树if(root.val>low)inOrder(root.left,low,high);if(root.val>=low&&root.val<=high)sum+=root.val;//若当前节点大于等于最大值,则不可能再访问右子树if(root.val<high)inOrder(root.right,low,high);
}
方法二 广度搜索(层序遍历)
换成层序遍历。
时间复杂度:O(n)
空间复杂度:O(n)
public int rangeSumBST(TreeNode root, int low, int high) {int sum=0;Queue<TreeNode> queue=new LinkedList<>();queue.offer(root);while(!queue.isEmpty()){int sz=queue.size();for(int i=0;i<sz;i++){TreeNode t=queue.poll();if(t.val>=low&&t.val<=high)sum+=t.val;//若当前节点小于等于最小值,则不可能再访问左子树if(t.val>low&&t.left!=null)queue.offer(t.left);//若当前节点大于等于最大值,则不可能再访问右子树if(t.val<high&&t.right!=null)queue.offer(t.right);}}return sum;
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~