关于二叉树相关题目的终止条件的判断

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 }    
复制代码

 

posted @   0龙行者0  阅读(217)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示