leetcode5

 BFS 的使用场景总结:层序遍历、最短路径问题 - 二叉树的层序遍历 - 力扣(LeetCode)

BFS模板

leetcode5_第1张图片

注意:在while循环的每一轮,都是将当前层的所有节点出队列,再将下一层的所有节点入队列,从而实现层序遍历

细节点:while循环每次遍历需要判断队列中的节点数量,因为要将里面的元素poll出来才能放入新的元素;for循环时是将queue中节点poll,然后根据这个poll出来的节点,将他的子节点add

public List> levelOrder(TreeNode root) {
    List> res = new ArrayList<>();

    Queue queue = new ArrayDeque<>();
    if (root != null) {
        queue.add(root);
    }
    while (!queue.isEmpty()) {
        int n = queue.size();
        List level = new ArrayList<>();
        for (int i = 0; i < n; i++) { 
            TreeNode node = queue.poll();
            level.add(node.val);
            if (node.left != null) {
                queue.add(node.left);
            }
            if (node.right != null) {
                queue.add(node.right);
            }
        }
        res.add(level);
    }

    return res;
}

DFS剪枝

leetcode5_第2张图片

 //递归
class Solution {
    public TreeNode pruneTree(TreeNode root) {
      //1.树结束条件
      if(root==null){
          return null;
      }

      //2.递归
      root.left=pruneTree(root.left);
      root.right=pruneTree(root.right);

      //3.对该节点进行剪枝判断
      if(root.left==null&&root.right==null&&root.val==0){
          return null;
      }
        return root;
    }
}

 leetcode5_第3张图片

 

class Solution {
   public List> levelOrder(TreeNode root) {
    List> list=new ArrayList<>();
    Queue queue=new ArrayDeque<>();
    if(root!=null){
    queue.add(root);
    }
    
    while(!queue.isEmpty()){
      //开始每一层的添加
      int n=queue.size();//每次for循环之后Queue中的节点数发生变化,根据这个变化进行下一次for循环次数
       List l=new ArrayList<>();

       for(int i=0;i

二分

leetcode5_第4张图片

 

class Solution {
    public int search(int[] nums, int target) {
       //1.定义两个指针
       int left=0,right=nums.length-1;
       //2.进行遍历,每次缩1/2
       while(left<=right){
           int mid=left+(right-left)/2;
           //2.1根据target大小判断左右区间
           if(nums[mid]>target){
               right=mid-1;
           }else if(nums[mid]

leetcode5_第5张图片

public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        //1.定义两个指针
        int left=0,right=n;
        //2.进行遍历
        while(left

 

你可能感兴趣的:(算法,算法)