110. Balanced Binary Tree

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(或许加判断等), 分, 合: 将分好的左右节点作为单个节点, 进行题意的操作(返回值, 全局变量), 返回值 

posted @ 2017-07-26 09:26  apanda009  阅读(130)  评论(0编辑  收藏  举报