前言
最近有道云笔记老是没响应,会员也这样,所以把算法的笔记公开到这个csdn,也算是公开的鞭策。
题目常练习起点位置: https://www.nowcoder.com/ta/coding-interviews?asc=false&order=knowledgePoint
题目
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路
什么是平衡的二叉树
子树高度差不超过1
暴力揭发
中序遍历,重复地,低效地计算每个访问到的node ,算这个node 的左右子树的高度
public class Solution {
boolean isBalance = true;
public boolean IsBalanced_Solution(TreeNode root) {
inorder(root);
return isBalance;
}
boolean inorder(TreeNode root) {
if (root == null);
else {
inorder(root.left);
if (Math.abs(maxDepth(root.left) - maxDepth(root.right)) > 1){ isBalance = false; return false;}// is not balance
inorder(root.right);
}
return true;
}
int maxDepth(TreeNode root) {
if (root == null) return 0;
else return 1+ Math.max(maxDepth(root.left), maxDepth(root.right));
}
}
恭喜你通过本题
运行时间:24ms
占用内存:9516k
优化,从下往上的
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
return getDepth(root) != -1;
}
private int getDepth(TreeNode root) {
if (root == null) return 0;
int left = getDepth(root.left);
if (left == -1) return -1;
int right = getDepth(root.right);
if (right == -1) return -1;
return Math.abs(left - right) > 1 ? -1 : 1 + Math.max(left, right);
}
}