计算二叉树的深度,判断二叉树是否是平衡二叉树

原创 2015年07月07日 20:49:50
package java_study.JianZhiOffer;

import org.junit.Test;

/**
 * Created by ethan on 2015/7/7.
 * 剑指offer No39计算二叉树的深度,判断二叉树是否是平衡二叉树
 */
public class No39二叉树的深度 {

    public int getDepth(TreeNode root){
        if (root == null) return 0;
        int left = getDepth(root.getLchild());
        int right = getDepth(root.getRchild());
        return (left>right?left:right)+1;
    }
    // 判断平衡二叉树的方法1: 先序的方法,这样重复遍历了
    public boolean isBalanceBinaryTree(TreeNode root){
        if (root==null) return true;
        int left = getDepth(root.getLchild());
        int right = getDepth(root.getRchild());
        int gap = left - right;
        if (Math.abs(gap)<=1){
            return isBalanceBinaryTree(root.getLchild()) && isBalanceBinaryTree(root.getRchild());
        }else
            return false;
    }
    // 判断平衡二叉树的方法2: 后序的方法,这样就不需要重复遍历了
    // 但是这样就要在根节点和子节点传递深度,如果用c/c++的指针实现比较简单,用java实现实在是ugly
    public class Depth{
        int depth;
    }
    public boolean isBanlanceBinaryTreePost(TreeNode root){
        return isBanlanceBinaryTreePostImp(root, new Depth());
    }
    public boolean isBanlanceBinaryTreePostImp(TreeNode root, Depth d){
        if (root==null) {
            d.depth = 0;
            return true;
        }
        Depth d_left = new Depth();
        Depth d_right = new Depth();
        if (isBanlanceBinaryTreePostImp(root.getLchild(), d_left) && isBanlanceBinaryTreePostImp(root.getRchild(), d_right)){
            int gap = d_left.depth - d_right.depth;
            if (Math.abs(gap)<=1){
                d.depth = ((d_left.depth>d_right.depth)?d_left.depth:d_right.depth)+1;
                return true;
            }
        }
        return false;
    }

    @Test
    public void test(){
        TreeNode root = TreeUtil.buildTree("478321", "872341");
        TreeUtil.postOrder(root);
        System.out.println();
        System.out.println(getDepth(root));
        System.out.println(isBalanceBinaryTree(root));
        System.out.println(isBanlanceBinaryTreePost(root));
    }
}

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

  • 2013年10月26日 23:25
  • 2KB
  • 下载

面试题——判断一棵树是否是平衡二叉树

bool IsBlance() { return _IsBlance(_root); } protected: bool _IsBlance(Node* root) { if (roo...

如何判断一棵树是否是平衡二叉树

判断的思路很简单,若一棵树是平衡二叉树,它的左右子树都是平衡二叉树,并且左右子树的高度差小于等于1。注意,实现的时候,判断左右子树的平衡性时,可以顺便计算子树高度,不用再另外计算一次,下面给出其递归实...

AVL树详解&面试题-判断一棵树是否是平衡二叉树

上次写了关于二叉搜索树的分析,但是二叉搜索树有一个缺陷,就是当插入一个有序(或接近有序)的序列时,二叉搜索树就相当于一个链表了,搜索效率会特别低。那么,如何来改进呢?这就引入了AVL树(高度平衡二叉树...

求二叉树深度、判断是否是平衡二叉树

求二叉树深度:递归的方法:从根节点按照先序顺序遍历二叉树,返回左子树和右子树中较大的深度,再加上1就是根节点的深度。C++代码实现:typedef struct TreeNode{ int d...

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

平衡 它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树...

二叉树的深度,判断是否是平衡二叉树

二叉树的深度,判断是否是平衡二叉树
  • A784586
  • A784586
  • 2017年03月20日 20:30
  • 159

判断二叉查找树是否是平衡二叉树(代码)

递归解法: (1)如果二叉树为空,返回真 (2)如果二叉树不为空,如果左子树和右子树都是AVL树并且左子树和右子树高度相差不大于1,返回真,其他返回假参考代码: /****************...

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

判断一个二叉树是否是平衡二叉树 题目:判断一个二叉排序树是否是平衡二叉树 思路:利用递归判断左右子树的深度是否相差1来判断是否是平衡二叉树。 1 #include 2 #includ...

二叉树的深度求值和判断是否是平衡

#ifndef BINTREE_H #define BINTREE_H #include #include #include using namespace std; template ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算二叉树的深度,判断二叉树是否是平衡二叉树
举报原因:
原因补充:

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