关于二叉树相关题目的终止条件的判断
1 遇到二叉树树相关的题目, 第一想到的应该就是递归, 无二叉树不递归, 每一个递归模型都可以抽象成一个二叉树模型
2 我们都应该知道, 二叉树的节点应该有两个节点, 分别是左子节点和右子节点, 如果一个节点的一边的子节点已经不存在了, 那就没有继续递归的必要了
3 所以, 递归终止条件的判断依据就是,
(1) 此节点为空
(2) 依次判断此节点的左子节点和右子节点是否为空, 分为4中不同的判断条件
感觉在一般情况之下, 这两种判断条件的存在是互斥的, 也就是说, 我们只需要选择其中一种较为合适的终止条件即可
如果选择第一种终止条件, 也就是说这个函数接收的node参数可以为null, 我们进行递归调用的时候, 可以直接传入node.left作为下一个节点参数而不需要保证这个节点不为空
如果选择第二种终止条件, 我们对一个节点的左右子节点都进行了严格的存在性判断, 如果其中某一个节点为空, 那么就不需要对这个子节点进行递归, 这样就保证了传入的参数节点永远都不为空
不过对于一些特殊的情况处理, 也是可以允许两种终止条件同时存在的, 但是没有遇到过具体的实例, 我只记得自己肯定用过, 不过当时的场景好像确实没有太大必要, 只是当时自己的逻辑混乱, 遇到具体的情况再细说吧
1 public void function(TreeNode root) { 2 3 if(root == null){ 4 5 } 6 7 if (root.left == null && root.right == null) { 8 9 } if(root.left != null && root.right == null){ 10 11 } else if (root.right != null && root.left != null) { 12 13 } else { 14 15 } 16 17 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通