题解 | #动物牛树#
动物牛树
https://www.nowcoder.com/practice/b1062d1a8e784e02b25dfd52f2f07546
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return bool布尔型 */ public boolean isBalanced (TreeNode root) { // write code here if (root == null) { return true; // 空树是动物牛树 } int leftDepth = depth(root.left); int rightDepth = depth(root.right); // 判断左右子树的深度差是否超过1,如果超过1则返回false if (Math.abs(leftDepth - rightDepth) > 1) { return false; } // 递归判断左右子树是否都是动物牛树 return isBalanced(root.left) && isBalanced(root.right); } // 计算树的深度 private int depth(TreeNode root) { if (root == null) { return 0; } return 1 + Math.max(depth(root.left), depth(root.right)); } }
这个代码使用递归方式来遍历二叉树的节点,并计算每个节点的左右子树的深度,然后判断深度差是否超过1。如果深度差不超过1,并且左右子树都是动物牛树,那么这棵树就是动物牛树。在示例中,输入 {1,2,3,#,#,4,5} 会返回 true,因为这棵树是动物牛树,而输入 {1,2,3} 也会返回 true,而输入 {1,#,2,#,3,#,4} 会返回 false,因为深度差超过了1。