面试经典150题【71-80】

文章目录

  • 面试经典150题【71-80】
    • 112.路径总和
    • 129.求根节点到叶子节点的数字之和
    • 124.二叉树中的最大路径和(要思考)
    • 173.二叉树迭代搜索器
    • 222.完全二叉树节点的个数
    • 236.二叉树的最近公共祖先
    • 199.二叉树的右视图
    • 637.二叉树的层平均值
    • 102.二叉树的层序遍历
    • 103.二叉树的锯齿形层序遍历

面试经典150题【71-80】

112.路径总和

在这里插入图片描述

class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if(root==null) return false;//叶子节点if(root.left ==null && root.right==null){return root.val == targetSum;}//看左子节点和右子节点,并且要减去当前值return hasPathSum(root.left,targetSum-root.val) || hasPathSum(root.right,targetSum-root.val);}
}

129.求根节点到叶子节点的数字之和

在这里插入图片描述
这种DFS的,还是要搞一个辅助函数

class Solution {public int sumNumbers(TreeNode root) {return helper(root,0);}public int helper(TreeNode root,int ans){if(root==null) return 0;int temp=ans*10+root.val;if(root.left==null && root.right==null){return temp;}return helper(root.left,temp)+helper(root.right,temp);}
}

124.二叉树中的最大路径和(要思考)

在这里插入图片描述
这个题要好好思考一下。
首先要明白,maxGain求的是什么,求的是经过我这个root节点以后,单边的最大值。因为只有这样,才能搞 root.val +maxGain(root.left) +maxGain(root.right)的值为最大。

class Solution {int maxSum = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {maxGain(root);return maxSum;}public int maxGain(TreeNode node) {if (node == null) {return 0;}// 递归计算左右子节点的最大贡献值// 只有在最大贡献值大于 0 时,才会选取对应子节点int leftGain = Math.max(maxGain(node.left), 0);int rightGain = Math.max(maxGain(node.right), 0);// 节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值int priceNewpath = node.val + leftGain + rightGain;// 更新答案maxSum = Math.max(maxSum, priceNewpath);// 返回节点的最大贡献值return node.val + Math.max(leftGain,rightGain);}
}

173.二叉树迭代搜索器

中序遍历树,存到数组里即可。

222.完全二叉树节点的个数

BFS遍历一遍求节点就行。DFS直接递归也可以。
不过因为是完全二叉树,则可以判断是否完全,若是完全则直接2的n次方-1,否则就DFS,
ans = 1 + func(root.left) + func(root.right)

236.二叉树的最近公共祖先

在这里插入图片描述
要不p,q在root的两侧,要不p和q其中一个是root一个是小弟。
终止条件:

if(root == null || root == p || root == q) return root;

如果为叶子节点,自然什么都没找到。如果找到一个节点,就返回一个节点。
比如 root == p == 3 ,则直接返回3.
遍历其左右子树

TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);

如果左右子树都有值,则答案为root
如果只有一个有值,则为其中的一边。答案返回的就是最近公共祖先

if(left == null) return right;
if(right == null) return left;
return root;

199.二叉树的右视图

在这里插入图片描述
简单的BFS即可,当 i == size -1 的时候加入答案数组中。

637.二叉树的层平均值

BFS

102.二叉树的层序遍历

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if(root==null) return new ArrayList<>();List<List<Integer>> res=new ArrayList<>();Queue<TreeNode> queue=new LinkedList<TreeNode>();queue.add(root);while(!queue.isEmpty()){int size=queue.size();List<Integer>list=new ArrayList<Integer>();for(int i=0;i<size;i++){TreeNode node=queue.poll();list.add(node.val);if(node.left!=null) queue.add(node.left);if(node.right!=null) queue.add(node.right);}res.add(list);}return res;}
}

103.二叉树的锯齿形层序遍历

设置一个boolean变量,每回合进行翻转。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/528088.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业战略管理 找准定位 方向 使命 边界 要干什么事 要做多大的生意 资源配置投入

AI突破千行百业&#xff0c;也难打破护城河 作为每个企业或个人的立命生存之本&#xff0c;有的企业在某个领域长期努力筑起了高高的护城河。 战略是什么&#xff1f;用处&#xff0c;具体内容 企业战略是指企业为了实现长期目标&#xff0c;制定的总体规划和长远发展方向。…

Qdrant 向量数据库的部署以及如何在 .NET 中使用 TLS 安全访问

本文介绍如何使用 Docker 部署 Qdrant 向量数据库&#xff0c;以及其相关的安全配置&#xff0c;并演示如何使用 .NET 通过 TLS 安全访问 Qdrant 向量数据库。 文章目录 1. 背景2. Qdrant 向量数据库的部署2.1 Qdrant 向量数据库的安全配置2.2 使用 Docker 部署安全的 Qdrant 向…

[QT]自定义的QtabWidget

需求 最近有一个需求就是一个QTabWidget要求有四个tab页在左侧用于显示主页面&#xff0c;在右侧有一个关于按钮&#xff0c;点击后用于弹出窗口显示一些程序相关信息。主要是怎么实现右侧按钮 相关代码 #ifndef MYTABWIDGET_H #define MYTABWIDGET_H#include <QWidget&g…

【联邦学习综述:概念、技术】

出自——联邦学习综述&#xff1a;概念、技术、应用与挑战。梁天恺 1*&#xff0c;曾 碧 2&#xff0c;陈 光 1 从两个方面保护隐私数据 硬件层面 可 信 执 行 环 境 &#xff08;Trusted Execution Environment&#xff0c;TEE&#xff09;边 缘 计 算&#xff08;Edge Com…

宝塔一键迁移报错创建失败问题完美解决

很多站长朋友在使用宝塔面板迁移的时候总是出错&#xff0c;如图&#xff1a; 遇到这样的问题不要慌&#xff0c;我们已经完美处理&#xff0c;详细解决教程&#xff1a;宝塔一键迁移报错问题完美解决教程

Golang-channel合集——源码阅读、工作流程、实现原理、已关闭channel收发操作、优雅的关闭等面试常见问题。

前言 面试被问到好几次“channel是如何实现的”&#xff0c;我只会说“啊&#xff0c;就一块内存空间传递数据呗”…所以这篇文章来深入学习一下Channel相关。从源码开始学习其组成、工作流程及一些常见考点。 NO&#xff01;共享内存 Golang的并发哲学是“要通过共享内存的…

【UVM_phase objection_2024.03.08

phase 棕色&#xff1a;function phase 不消耗仿真时间 绿色&#xff1a;task phase 消耗仿真时间 run_phase与右边的phase并行执行&#xff0c;右边的phase&#xff08;run_time phase&#xff09;依次执行&#xff1a; List itemreset_phase对DUT进行复位&#xff0c;初始…

Java 虚拟线程截止 2024-3-10 在 OpenJDK 还没有解决消息的问题

之前的文章《虚拟线程目前不推荐上生产的个人思考》&#xff0c;总结了几个目前的问题&#xff1a; 1. synchronized 的 pin 线程引发的问题比预期严重&#xff0c;或者等到 OpenJDK 修复&#xff0c;或者很多 Java 库要改&#xff08;尤其是 JDBC 驱动这种&#xff09;。目前…

RN开发搬砖经验之-如何处理FlashList组件加载后调用scrollToIndex没有滚动指定位置

前言 如题&#xff0c;这里只能说是处理&#xff0c;起正向作用的临时方案&#xff0c;因为我也着实没搞懂这个BUG的具体原因&#xff0c;看github上有提相关的issuesFor long lists with different item types scrollToIndex does not work reliable&#xff0c;但看官方没有…

JDBC的学习记录

JDBC就是使用java语言操作关系型数据库的一套API。 JDBC&#xff08;Java Database Connectivity&#xff09;是Java语言中用于连接和操作数据库的一种标准接口。它提供了一组方法和类&#xff0c;使Java程序能够与各种不同类型的关系型数据库进行交互。 JDBC的主要功能包括建…

解锁网络数据:入门级IP代理使用教程

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

力扣难题:重排链表

首先通过快慢指针找到中间节点&#xff0c;然后将中间节点之后和之前的部分分为两个链表&#xff0c;然后翻转后面的链表&#xff0c;注意方法&#xff0c;然后将两个链表交替链接。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode…