《剑指offer》——平衡二叉树

原创 2015年11月21日 17:25:41

T:

题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。

该题目我想了好久,总是想在一个递归函数内解决这个问题,最后没能找出解决方案。

本题的关键在于两个部分的求解:

  1. 要计算每个节点的深度(或者计算该节点两个孩子节点的深度);
  2. 根据两个子节点的深度差判断该以该节点为子树的结构是否为平衡二叉树。

第一个问题的求解,就需要递归解决,第二个问题,也要递归解决。

比如:

节点a的两个子节点的深度差小于等于1,还要继续看两个子节点是否各自满足这个条件,即对每个子节点来说,其两个子节点是否也满足深度差小于等于1,如此递归下去,直到叶节点。

两个问题,就需要两个递归函数,各自执行各自的功能,而问题2的求解依赖于问题1的答案。

code:

    /**
     * T: 平衡二叉树
     * 
     * 题目描述 
     * 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
     * 
     * date: 2015.11.21  17:14
     * @author SSS
     *
     */
    public class Solution {

        /**
         * 该函数的功能:
         * 判断当前节点的左右节点其高度差是否大于1.
         * 当大于1的时候返回false;
         * 当不大于1的时候,要看其两个子节点是否也满足该条件。
         * @param root
         * @return
         */
        public boolean IsBalanced_Solution(TreeNode root) {
            if (root == null) {
                return true;
            }

            int leftDepth = this.getDepth(root.left);
            int rightDepth = this.getDepth(root.right);

            if (Math.abs(leftDepth - rightDepth) > 1) {
                return false;
            }

            return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
        }

        /**
         * 该函数的功能:当前节点为根节点的子树的深度
         * @param rootTreeNode
         * @return
         */
        public int getDepth(TreeNode rootTreeNode) {
            if (rootTreeNode == null) {
                return 0;
            }

            int leftDepth = getDepth(rootTreeNode.left);
            int rightDepth = getDepth(rootTreeNode.right);

            int depth = Math.max(leftDepth, rightDepth);
            return depth + 1;
        }
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

剑指Offer面试题39(Java版):二叉树的深度

题目:输入一棵二叉树的根节点,求该数的深度。从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度。 例如,如下图的二叉树的深度为4,因为它从根节点到叶结点的最长的...
  • jsqfengbao
  • jsqfengbao
  • 2015年08月10日 08:42
  • 2469

剑指offer:判断二叉树是不是平衡二叉树(java)

题目:输入一棵二叉树的根节点,判断该树是不是平衡的二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。     有了求二叉树的深度的经验之后再解决这个问题,我们很容易...
  • abc7845129630
  • abc7845129630
  • 2016年10月06日 18:48
  • 3510

【剑指offer】判断二叉树平衡

题目:输入一个二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 剑指offer上给的第二种思路,用后序遍历真的是将递归发...
  • mmc_maodun
  • mmc_maodun
  • 2014年05月28日 08:22
  • 3033

剑指 offer代码解析——面试题39判断平衡二叉树(高效方法)

题目:输入一颗二叉树的根结点,判断该树是不是平衡二叉树。 如果某二叉树中任意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树。 分析:所谓平衡二叉树就是要确保...
  • u010425776
  • u010425776
  • 2016年04月02日 16:32
  • 2026

剑指Offer——判断平衡二叉树

题目描述: 输入一个二叉树的根节点, 1)求二叉树的深度。 2)判断该树是不是平衡二叉树。 二叉树的深度:从根节点遍历到叶节点的路径,经过最长路径的节点数。 平衡二叉树:二叉树的任意结点的左...
  • xiaominkong123
  • xiaominkong123
  • 2016年05月18日 16:57
  • 163

剑指Offer——(39)平衡二叉树

输入一棵二叉树,判断该二叉树是否是平衡二叉树。
  • kongkongkkk
  • kongkongkkk
  • 2017年07月24日 15:33
  • 117

《剑指offer》刷题笔记(知识迁移能力):平衡二叉树

《剑指offer》刷题笔记(知识迁移能力):平衡二叉树 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://github.com/WordZ...
  • u011475210
  • u011475210
  • 2017年12月13日 00:04
  • 989

【剑指offer】面试题55(2):平衡二叉树

题目输入一棵二叉树的根节点,判断该树是不是平衡二叉树。 如果某二叉树中的任意节点的左、右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 思路我们用后序遍历的方式遍历二叉树的每个节点,那么在遍历...
  • qq1263292336
  • qq1263292336
  • 2017年08月01日 23:25
  • 104

【剑指Offer】:面试题39:平衡二叉树

整理自剑指Offer 一:题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 二:解题思路 如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡...
  • u010059070
  • u010059070
  • 2017年07月21日 15:51
  • 109

《剑指Offer》面试题:平衡二叉树

题目 输入一个二叉树的根节点, 判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 思路: 用后序遍历实现 先遍历节...
  • u010412719
  • u010412719
  • 2015年10月11日 22:41
  • 422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《剑指offer》——平衡二叉树
举报原因:
原因补充:

(最多只允许输入30个字)