IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 110 平衡二叉树 -> 正文阅读

[数据结构与算法]110 平衡二叉树

题目

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

在这里插入图片描述

递归三部曲

(1)确定递归函数的参数和返回值:
确定哪些参数是递归的过程中需要处理的
明确每次递归的返回值是什么进而确定递归函数的返回类型。
这个题目中:
递归的参数就是树的每个节点
返回值就是当前这个节点所在的高度
(2)确定终止条件:
递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈 的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

这个题目中,终止条件是节点为空的时候,
(3)确定单层递归的逻辑:
确定每一层递归需要处理的信息。

这个题目中,单层递归的逻辑就是先判断当前节点的左右子树是否是平衡二叉树。
如果不是平衡二叉树,返回-1表明整个二叉树不是平衡二叉树
如果当前节点的左右子树是平衡二叉树,使用当前子树的左右子树高度来判断当前节点是否是平衡二叉树。如果不是,返回-1;如果是平衡二叉树,返回当前节点的高度给上一层节点。

思路

1、判断左了树或右子树是否返回-1
2、如果左子树已经返回-1, 就不需要再递归右子树了
3、如果当前节点的左右子树高度差超过1, 返回-1

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
        return Height(root) != -1 ? true : false;

    }

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

        int LeftHeight;
        int RightHeight;

        if((LeftHeight = Height(root.left))==-1 || (RightHeight = Height(root.right))==-1 || Math.abs(LeftHeight-RightHeight) > 1){
            return -1;
        }
        return Math.max(LeftHeight,RightHeight)+1;
    }
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:51:10  更:2022-02-22 20:53:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:29:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码