博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指 Offer》——39、平衡二叉树
阅读量:2343 次
发布时间:2019-05-10

本文共 1328 字,大约阅读时间需要 4 分钟。

1. 本题知识点

2. 题目描述

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

在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树。

平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过 1,并且左右两个子树都是一棵平衡二叉树。

例如:

输入:{1,2,3,4,5,6,7}返回值:true

3. 解题思路

利用后序遍历:左子树、右子树、根节点,可以先递归到叶子节点,然后在回溯的过程中来判断是否满足条件。

4. 代码

public class TreeNode {
int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {
this.val = val; }}
public class Solution {
public boolean isBalanced_Solution(TreeNode root) {
// 它是一棵空树,则是平衡的 if (root == null) {
return true; } int depth = getDepth(root); if (depth == -1) {
return false; } return true; } /** * 返回当前节点的深度 * @param root * @return */ public int getDepth(TreeNode root) {
// 叶节点深度为 0 if (root == null) {
return 0; } int left = getDepth(root.left); // 遍历过程中发现子树不平衡 if (left == -1) {
return -1; } int right = getDepth(root.right); // 遍历过程中发现子树不平衡 if (right == -1) {
return -1; } // 左右两个子树的高度差的绝对值超过 1,则不平衡 if (Math.abs(left - right) > 1) {
return -1; } // 返回当前节点的深度 return left > right ? left + 1 : right + 1; }}

转载地址:http://objvb.baihongyu.com/

你可能感兴趣的文章
U-boot如何引导Linux内核启动?
查看>>
程序各个段text,data,bss,stack,heap
查看>>
如何利用ROS MoveIt快速搭建机器人运动规划平台?
查看>>
catkin_make &catkin build
查看>>
Camera和IMU的标定过程之kalibr 源码编译
查看>>
在ubuntu下安装python的numpy和scipy模块
查看>>
Ubuntu下apt-get与pip安装命令的区别
查看>>
linux CMakeLists.txt 语法
查看>>
cmake 简介
查看>>
CMake学习笔记(1)——用CMake编译一个hello world程序
查看>>
cmake使用总结---工程主目录CMakeList文件编写
查看>>
CMake学习之路
查看>>
cmake学习笔记6-catkin的CmakeList.txt讲解
查看>>
cmake手册详解
查看>>
Maplab框架介绍(一)
查看>>
Maplab开源VI-SLAM框架介绍
查看>>
maplab(1):安装
查看>>
陀螺仪随机误差的Allan方差分析
查看>>
Ubuntu 64位安装Adobe Reader 9.5.5
查看>>
Ubuntu 下如何查看已安装的软件
查看>>