题解 | #动物牛树#
动物牛树
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。

查看5道真题和解析