Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
//会构造递归函数根据题目要求 //和治的时候的分情况讨论树的构造---以根节点为中心,讨论左、右、题目要求 public class Solution { public boolean isBalanced(TreeNode root) { // 返回值类型 return maxDepth(root) != -1; } private int maxDepth(TreeNode node) { if (node == null) { return 0; } //divide int left = maxDepth(node.left); int right = maxDepth(node.right); //conquer /*根据要求操作节点进入结果 画图: 分三种情况讨论 以根节点为中心讨论左右节点的差 + 单独讨论左子树 + 单独讨论右子树*/ if (Math.abs(left - right) > 1 || left == -1 || right == -1) { return -1; } return Math.max(left, right) + 1; } }
分治法, 自己画个简图(三个, 两个节点), 遍历一下
会写树的高度, 在树的高度上加了个判断而已.别忘了左子树和右子树也是要查的
分治法主要在如何设计返回值, 和题意与返回值的转化,
递归出口1(判空), 最后的节点的出口2(或许加判断等), 分, 合: 将分好的左右节点作为单个节点, 进行题意的操作(返回值, 全局变量), 返回值