每日算法&面试题,大厂特训二十八天——第二十天(树)

Posted 肥学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日算法&面试题,大厂特训二十八天——第二十天(树)相关的知识,希望对你有一定的参考价值。

目录标题

导读

肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。上一期我们完成了动态规划二十一天现在我们进行下一项对各类算法进行二十八天的一个小总结。还在等什么快来一起肥学进行二十八天挑战吧!!

特别介绍

📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶

📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏

📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们

📣这是个冲刺大厂面试专栏还有算法比赛练习我们一起加油 上岸之路

算法特训二十八天

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点
的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。

思路:首先我们可以想到使用广度优先搜索的方式,记录从根节点到当前节点的路径和,以防止重复计算。

这样我们使用两个队列,分别存储将要遍历的节点,以及根节点到这些节点的路径和即可。

初始部分:
/**
 * Definition for a binary tree node.
 * public class TreeNode 
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() 
 *     TreeNode(int val)  this.val = val; 
 *     TreeNode(int val, TreeNode left, TreeNode right) 
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     
 * 
 */

class Solution 
    public boolean hasPathSum(TreeNode root, int sum) 
        if (root == null) 
            return false;
        
        Queue<TreeNode> queNode = new LinkedList<TreeNode>();
        Queue<Integer> queVal = new LinkedList<Integer>();
        queNode.offer(root);
        queVal.offer(root.val);
        while (!queNode.isEmpty()) 
            TreeNode now = queNode.poll();
            int temp = queVal.poll();
            if (now.left == null && now.right == null) 
                if (temp == sum) 
                    return true;
                
                continue;
            
            if (now.left != null) 
                queNode.offer(now.left);
                queVal.offer(now.left.val + temp);
            
            if (now.right != null) 
                queNode.offer(now.right);
                queVal.offer(now.right.val + temp);
            
        
        return false;
    





给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

叶子节点 是指没有子节点的节点。

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

输入:root = [1,2,3], targetSum = 5
输出:[]

思路:我们可以采用深度优先搜索的方式,枚举每一条从根节点到叶子节点的路径。当我们遍历到叶子节点,且此时路径和恰为目标和时,我们就找到了一条满足条件的路径。

初始部分:
/**
 * Definition for a binary tree node.
 * public class TreeNode 
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() 
 *     TreeNode(int val)  this.val = val; 
 *     TreeNode(int val, TreeNode left, TreeNode right) 
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     
 * 
 */

解题部分:
class Solution 
    List<List<Integer>> ret = new LinkedList<List<Integer>>();
    Deque<Integer> path = new LinkedList<Integer>();

    public List<List<Integer>> pathSum(TreeNode root, int targetSum) 
        dfs(root, targetSum);
        return ret;
    

    public void dfs(TreeNode root, int targetSum) 
        if (root == null) 
            return;
        
        path.offerLast(root.val);
        targetSum -= root.val;
        if (root.left == null && root.right == null && targetSum == 0) 
            ret.add(new LinkedList<Integer>(path));
        
        dfs(root.left, targetSum);
        dfs(root.right, targetSum);
        path.pollLast();
    




面试题

计算机插上电源操作系统做了什么?
 加电––––打开电源开关,给主板和内部风扇供电。
 启动引导程序––––CPU 开始执行存储在 ROM Bios 中的指令。
 开机自检––––计算机对系统的主要部件进行诊断测试。
 加载操作系统––––计算机将操作系统文件从磁盘读到内存中。
 检查配置文件,定制操作系统的运行环境––––读取配置文件,根据用户的设置对操作
系统进行定制。
 准备读取命令和数据––––计算机等待用户输入命令和数据

```java
多线程同步有哪些方法?
 使用 synchronized 关键字
 wait 和 notify
 使用特殊域变量 volatile 实现线程同步
 使用重入锁实现线程同步
 使用局部变量来实现线程同步
 使用阻塞队列实现线程同步
 

点击直接资料领取

这里有python,Java学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。

以上是关于每日算法&面试题,大厂特训二十八天——第二十天(树)的主要内容,如果未能解决你的问题,请参考以下文章

每日算法&面试题,大厂特训二十八天——第二十七天(函数)

每日算法&面试题,大厂特训二十八天——第二十三天(树)

每日算法&面试题,大厂特训二十八天——第二十六天(循环)

每日算法&面试题,大厂特训二十八天——第二十天(树)

每日算法&面试题,大厂特训二十八天——第二十五天(条件语句)

每日算法&面试题,大厂特训二十八天——第八天(递归|回溯)