判断是否是平衡二叉树

tag: 二叉树 - 平衡二叉树

package com.zhaochao.tree;

/**
 * Created by zhaochao on 17/1/24.
 * 平衡二叉树是指: 对于树中的每个节点,其左右孩子的高度差不超过1
 * 注意:是每一个节点都平衡才可以。
 *
 * 方法一: 递归法。 用一个DFS深度优先帮助函数求树的高度, 若其中一个节点不平衡,则返回-1,否则返回树的高度
 */

public class JudgeAVL {

    public boolean isAVL(TreeNode root) {

        if(root == null) {
            return true;
        }

        return getDepth(root) != -1;
    }

    public int getDepth(TreeNode root) {
        if(root == null) {
            return 0;
        }

        int left = getDepth(root.left);
        int right = getDepth(root.right);

        if(left == -1 || right == -1 || Math.abs(left - right) > 1) {
            return -1;
        }

        return Math.max(left, right) + 1;
    }

    public static void main(String[] args) {

        TreeNode root = new TreeNode(0);
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(3);

        root.left = node1;
        root.right = node2;
        node2.left = node3;
        node3.left = node4;

        JudgeAVL test = new JudgeAVL();
        boolean result = test.isAVL(root);
        System.out.println("Is balanced tree : "+result);

    }
}

  

时间: 2024-12-15 04:41:47

判断是否是平衡二叉树的相关文章

判断二叉树是不是平衡二叉树

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树.某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵二叉树. 我们很容易就能想到一个代码简洁却性能不佳的思路:在遍历树的每个结点的时候,调用函数TreeDpth得到它的左右子树的深度.如果每个结点的左右子树的深度相差都不超过1,按照定义它就是一棵平衡的二又树. 较好的思路是:用后序遍历的方式遍历整棵二叉树.在遍历某结点的左右子结点之后,我们可以根据它的左右子结点的深度判断它是不是平衡的,并得到当前结点的深度.当最后遍历到树的根结点

56. 2种方法判断二叉树是不是平衡二叉树[is balanced tree]

[本文链接] http://www.cnblogs.com/hellogiser/p/is-balanced-tree.html [题目] 输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树.例如下图中的二叉树就是一棵平衡二叉树: [分析] 之前的博文27.二元树的深度[BinaryTreeDepth]中介绍过如何求二叉树的深度.有了经验之后再解决这个问题,我们很容易就能想到思路. [方案1] 先判断左右子树是不是平衡的

C++算法之 判断是否为平衡二叉树 求二叉树的镜像

1:判断是否为平衡二叉树: //方法1: int TreeDepth(BTree* pRoot) { if (pRoot == NULL) return 0; int nLeftDepth = TreeDepth(pRoot->m_pLeft); int nRightDepth = TreeDepth(pRoot->m_pRight); return (nLeftDepth > nRightDepth)? (nLeftDepth+1):(nRightDepth+1); } bool Is

判断二叉树是否平衡二叉树

题目 平衡二叉树的性质为:要么是一颗空树,要么任何一个节点的左右子树高度差的绝对值不超过1.给定一棵二叉树的头结点head,判断这棵二叉树是否为平衡二叉树. 难度:?? 基础理解 以下是个人认为对概念叙述较为详细的参考链接: 对平衡二叉树的理解:判断二叉树是否为平衡二叉树 对先序.中序.后序遍历的理解:二叉树的实现及先序.中序.后序遍历 设计 概要设计 设计一个初始树节点模型 接收节点变量并判断是否为平衡二叉树的方法 如何判断是否为平衡二叉树 包含对左右各分支节点的计数器,并以此相减,是否满足绝

《剑指offer》:[39-1]判断是否为平衡二叉树

题目:输入一棵二叉树的结点,判断该树是不是平衡二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 上图中的二叉树就是一棵平衡二叉树. 分析:有了求二叉树深度的思路后,我们很快就能找到求解该问题的方法,就是从根结点开始开始判断其左右子结点的深度之差是否为1.如果从根结点开始到叶子结点的每一个结点的左右子树的深度相差都不超过1,则说明该二叉树是平衡二叉树.但是其时间复杂度接近O(N*N),因为里面有重复的遍历和访问.例如我们在判断8这个根结点是否是平衡的时候,我们

判断是否为平衡二叉树

问题描述: 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true . 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / 2 2 / 3 3 / 4 4 返回 false . 解决思路: 计算二叉树中每个节点左子树与右子树的高度,比较二者差的绝对值是否不超

LeetCode——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. 分析: 判断平衡二叉树,第一想法肯定是求出左右子树的深度,看是

【Tree】判断平衡二叉树AVL

1 /*********************************** 2 https://leetcode.com/problems/balanced-binary-tree/ 3 @date 2015.5.8 4 @description 5 给定一个二叉树,判断是否是平衡二叉树 6 @tags tree, DFS 7 8 平衡二叉树满足的条件: 9 1.左右子树的高度差不大于1 10 2.左右子树均是平衡二叉树 11 12 本次解决方案提供了两种方法: 13 Solution1. 1

二叉树的建立以及相关操作,平衡二叉树

二叉树的一些属性: int datdID;double data;TreeNode leftTree;TreeNode rightTree;TreeNode parent; //构建一个二叉树,将数据都放入了一个LIST里面    int selfID = 0;    public TreeNode creatTree(List<Double>datas,TreeNode tree){        if(datas.size()!=0){            TreeNode node =