关于二叉树相关题目的终止条件的判断
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 }