zoukankan      html  css  js  c++  java
  • 剑指 offer代码解析——面试题39推断平衡二叉树

    题目:输入一颗二叉树的根结点。推断该树是不是平衡二叉树。

    假设某二叉树中随意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树。


    分析:所谓平衡二叉树就是要确保每一个结点的左子树与右子树的高度差在-1到1之间。

    因为之前一题已经给出了二叉树高度的计算方法,因此本题最直观的思路就是分别计算每一个结点的左子树高和右子树高,从而推断一棵树的全部结点是否均为平衡二叉树。

    /**
     * 题目:输入一颗二叉树的根结点。推断该树是不是平衡二叉树。

    * 假设某二叉树中随意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树。 * @author 大闲人柴毛毛 * @date 2016年4月2日 */ public class BalanceTree { /** * 分析:所谓平衡二叉树就是要确保每一个结点的左子树与右子树的高度差在-1到1之间。 * 因为之前一题已经给出了二叉树高度的计算方法。因此本题最直观的思路就是分别计算每一个结点的左子树高和右子树高,从而推断一棵树的全部结点是否均为平衡二叉树。 * 代码例如以下: */ public static <T> boolean isBalanceTree_1(Node<T> root){ //健壮性推断:若树为空 if(root==null){ System.out.println("树为空!

    "); return true; } // 计算左子树高 int left_height = TreeHeight.getTreeHeight(root.left); // 计算右子树高 int right_height = TreeHeight.getTreeHeight(root.right); // 计算高度差 int mid = left_height - right_height; // 推断高度差是否为-1、0、1 if (mid == -1 || mid == 0 || mid == 1) // 若当前结点是平衡二叉树。则计算左子树和右子树是否为平衡二叉树 return (isBalanceTree_1(root.left) && isBalanceTree_1(root.right)); // 若当前结点不是二叉平衡树,则返回false else return false; } /** * 測试 */ public static void main(String[] args){ //构造一棵平衡二叉树 Node<Integer> node1 = new Node<Integer>(); Node<Integer> node2 = new Node<Integer>(); Node<Integer> node3 = new Node<Integer>(); Node<Integer> node4 = new Node<Integer>(); Node<Integer> node5 = new Node<Integer>(); Node<Integer> node6 = new Node<Integer>(); Node<Integer> node7 = new Node<Integer>(); Node<Integer> node8 = new Node<Integer>(); Node<Integer> node9 = new Node<Integer>(); node1.data = 1; node2.data = 2; node3.data = 3; node4.data = 4; node5.data = 5; node6.data = 6; node7.data = 7; node8.data = 8; node9.data = 9; node1.left = node2; node1.right = node3; node2.left = node4; node2.right = node5; node5.left = node7; node3.right = node6; // node7.left = node8; // node8.left = node9; System.out.println(isBalanceTree_1(node1)); } }



  • 相关阅读:
    设计模式之工厂模式 练习
    c++智能指针(1)
    记录下 UTF6 GBK 转换函数
    ip白名单 通过* ? 检测IP匹配 轻量级
    stl学习记录(2)
    boost 学习(1)
    stl string 小练习
    stl string 使用指定的分隔符分割成数个子字符串
    [open source] skinbuilder发布
    Builder模式实例分析(C语言版)
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7257592.html
Copyright © 2011-2022 走看看