尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【力扣hot100】二叉树专题
文章目录104.二叉树的最大深度226. 翻转二叉树101.对称二叉树543. 二叉树的直径102.二叉树的层序遍历108. 将有序数组转换为二叉搜索树104.二叉树的最大深度104. 二叉树的最大深度递归/** * 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; * } * } */classSolution{publicintmaxDepth(TreeNoderoot){if(rootnull)return0;intleftmaxDepth(root.left);intrightmaxDepth(root.right);returnMath.max(left,right)1;}}226. 翻转二叉树226. 翻转二叉树先递归到底再交换/** * 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; * } * } */classSolution{publicTreeNodeinvertTree(TreeNoderoot){if(rootnull)returnnull;invertTree(root.left);invertTree(root.right);TreeNodetemproot.left;root.leftroot.right;root.righttemp;returnroot;}}101.对称二叉树101. 对称二叉树将整棵树的对称问题转化为判断“左子树”和“右子树”是否互为镜像。通过check函数每次递归都严格比较两个节点的值是否相等然后让左节点的“左孩子”与右节点的“右孩子”对比同时让左节点的“右孩子”与右节点的“左孩子”对比即交叉比较一路递归到底只要所有交叉对应的节点都匹配整棵树就是对称的/** * 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; * } * } */classSolution{publicbooleanisSymmetric(TreeNoderoot){returncheck(root.left,root.right);}publicbooleancheck(TreeNodeleft,TreeNoderight){//两边都为空 对称if(leftnullrightnull)returntrue;//只有一边为空或者值不同 不对称if(leftnull||rightnull||left.val!right.val)returnfalse;//继续向下交叉比较returncheck(left.left,right.right)check(left.right,right.left);}}543. 二叉树的直径543. 二叉树的直径遍历二叉树在计算最大深度的同时顺带把直径算出来在当前节点拐点的直径长度 左子树的最大深度 右子树的最大深度返回给父节点的是当前子树的最大深度 max(左子树的最大深度右子树的最大深度)1/** * 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; * } * } */classSolution{privateintres0;publicintdiameterOfBinaryTree(TreeNoderoot){maxDepth(root);returnres;}publicintmaxDepth(TreeNoderoot){if(rootnull)return0;intleftmaxDepth(root.left);intrightmaxDepth(root.right);resMath.max(res,leftright);returnMath.max(left,right)1;}}102.二叉树的层序遍历102. 二叉树的层序遍历BFScur数组存当前正在遍历的节点nxt数组存被遍历节点的左右子节点vals数组存部分答案遍历cur把左右子节点记录到nxt中同时把节点值记录到数组vals中遍历结束后把vals加到答案里遍历结束把cur替换成nxt开始下一轮循环cur不为空就证明还没遍历完/** * 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; * } * } */classSolution{publicListListIntegerlevelOrder(TreeNoderoot){if(rootnull)returnList.of();ListListIntegeransnewArrayList();ListTreeNodecurList.of(root);while(!cur.isEmpty()){ListTreeNodenxtnewArrayList();ListIntegervalsnewArrayList(cur.size());for(TreeNodenode:cur){vals.add(node.val);if(node.left!null)nxt.add(node.left);if(node.right!null)nxt.add(node.right);}curnxt;ans.add(vals);}returnans;}}优化一下把cur数组和nxt数组用一个队列替代/** * 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; * } * } */classSolution{publicListListIntegerlevelOrder(TreeNoderoot){if(rootnull)returnList.of();ListListIntegeransnewArrayList();QueueTreeNodeqnewArrayDeque();q.add(root);while(!q.isEmpty()){intnq.size();ListIntegervalsnewArrayList(n);while(n0){TreeNodenodeq.poll();vals.add(node.val);if(node.left!null)q.add(node.left);if(node.right!null)q.add(node.right);n--;}ans.add(vals);}returnans;}}108. 将有序数组转换为二叉搜索树108. 将有序数组转换为二叉搜索树平衡二叉搜索树每个节点的左子树和右子树高度相差不超过1由于给定的数组是严格升序的要构建一棵高度平衡的二叉搜索树BST关键在于每次都选取当前区间的中间元素作为根节点这样能保证左右子树的节点数量尽可能相等随后以中间元素为界将数组一分为二递归地对左半区间构建左子树、对右半区间构建右子树直到区间越界left right时返回null作为递归出口最终自底向上拼接出一棵完美的平衡二叉搜索树。/** * 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; * } * } */classSolution{publicTreeNodesortedArrayToBST(int[]nums){returnbuild(nums,0,nums.length-1);}publicTreeNodebuild(int[]nums,intleft,intright){if(leftright)returnnull;intmid(leftright)/2;TreeNoderootnewTreeNode(nums[mid]);root.leftbuild(nums,left,mid-1);root.rightbuild(nums,mid1,right);returnroot;}}
RELATED

相关推荐

家用电梯方案为什么每家不一样?看懂宽深比例选型逻辑不踩坑

家用电梯方案为什么每家不一样?看懂宽深比例选型逻辑不踩坑

同尺寸电梯方案差很多?宽深比例选型逻辑全解析准备装家用电梯的业主,常会遇到一个困惑:同样的井道尺寸,咨询不同品牌,给出的结构方案天差地别。有人推荐螺杆式,有人主推背包式,还有人说强驱式更…

📅 2026/10/6 18:59:53
Wingman:Go语言AI Agent开发框架,告别胶水代码地狱

Wingman:Go语言AI Agent开发框架,告别胶水代码地狱

如果你正在尝试将 AI Agent 集成到自己的应用中,大概率会遇到这样的困境:每个 AI 服务商(如 OpenAI、Anthropic、Google 等)的 API 调用方式、参数格式、流式响应处理都略有不同。为了支持多个模型,你不得不写一堆 if…

📅 2026/9/14 13:29:43
四大开源AI智能体框架横向评测:从OpenClaw到CrewAI的选型指南

四大开源AI智能体框架横向评测:从OpenClaw到CrewAI的选型指南

1. 从“小龙虾”到“智能体”:OpenClaw的江湖地位与核心价值最近在AI智能体这个圈子里,OpenClaw这个名字的讨论度有点高。如果你在技术社区或者一些开发者社群里潜水,可能会看到不少人在问“OpenClaw怎么装”、“OpenClaw怎么接大模型”或者“…

📅 2026/10/8 0:13:31
MORE NEWS

更多资讯

📰

pstack-claude:给Claude Code做进程诊断的轻量工具

1. pstack-claude是什么:给AI助手做体检的“进程诊断器”先说结论:pstack-claude 是一个把传统 Linux 调试工具 pstack 的能力,定向用在 Claude Code 这个 AI 编程助手上的轻量级辅助工具集。它解决的不是“怎么把 Claude Code 装好”&#x…

📰

Python读取Oracle数据乱码问题解决:用TaoToken统一Key排查cx_Oracle编码链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

存储器容量扩展实战:位扩展与字扩展原理、连线与调试

1. 从一块不够用的存储芯片说起做嵌入式或者计算机体系结构相关项目的朋友,几乎都绕不开一个经典问题:手头的存储芯片容量不够用。你手里可能只有几片小容量的SRAM或DRAM芯片,但项目需要更大的存储空间,这时候就得想办法把多片芯片…

📰

最新NDK下载与32/64位ABI配置实战指南

1. 为什么NDK的32位与64位选择值得单独拿出来讲搞Android原生开发的兄弟都清楚,NDK这东西不像普通SDK那样装完就完事。它涉及到ABI(应用二进制接口)的适配问题,说白了就是你的C/C代码最终编译成什么指令集的机器码,跑在…

📰

MQTT.fx连接A云平台报错Bad user name or password?一文搞定参数排查

1. 先看这个报错是怎么出现的1.1 这条报错到底是谁给的点下 Connect 之后,MQTT.fx 的状态区弹出一行红字:Bad user name or password (MQTT 3.1.1)。这个报错看起来像“用户名或密码错了”,但多数人把 DeviceSecret 反复复制了好几遍&#xf…

📰

嵌入式C++内存管理实战:从内存分区到内存池与排查技巧

做嵌入式C项目这些年,内存管理永远是绕不开的核心话题。不管是裸机开发还是嵌入式Linux,内存约束都比PC严苛得多,而C在嵌入式环境里更是把双刃剑:用好了抽象能力强、代码结构清晰,用不好就是内存泄漏、栈溢出、堆碎片化…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬