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

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 @ 2021-03-10 21:33  0龙行者0  阅读(203)  评论(0编辑  收藏  举报