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

public boolean IsBalanced_Solution(TreeNode root) {
        return getDepth(root) != -1;
    }
    private int getDepth(TreeNode root) {
        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;
        return Math.abs(left - right) > 1 ? -1 : 1 + Math.max(left, right);
    }

原文地址:https://www.cnblogs.com/nachdenken/p/12059363.html

时间: 2024-10-29 19:22:47

【算法】输入一棵二叉树,判断该二叉树是否是平衡二叉树。的相关文章

28、输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路:  1.当Tree1和Tree2都不为零的时候,才进行比较.否则直接返回false  2. 2.1如果找到了对应Tree2的根节点的点, 以这个根节点为为起点判断是否包含Tree2 2.2 如果找不到,那么就再去root的左孩子当作起点,去判断时候包含Tree22.3 如果还找不到,那么就再去root的右孩子当作起点,去判断时候包含Tree2 1 public class Solution

【算法】如何判断一个二叉树是平衡二叉树

题目:如何判断一个二叉树是平衡二叉树 定义: 平衡二叉树(AVL):1.空二叉树是AVL树: 2.如果T是一颗非空的二叉搜索树,TL和TR分别是其左子树和右子树,那么当T满足一下条件时,T是一颗AVL树:(1)TL和TR是AVL树:(2)|HL-HR|<=1,HL和HR分别是左子树和右子树的高度 示例: 算法思想: 采用递归的思想,从root节点进行递归的调用.假设叶子节点的高度是0,分别计算各个节点的左右子树的高度差:若高度差大于1则返回-1(表示不是平衡树)否则返回子树的最大高度加一. 时间

【3】输入一颗二叉树判断是不是平衡二叉树

题目:输入一颗二叉树的根结点,判断该二叉树是不是平衡二叉树.平衡二叉树是满足所有结点的左右子树的高度差不超过1的二叉树 方案一:遍历数组的每一个结点,对每一个结点求它的左右子树的高度并进行判断.时间复杂度大于O(n),小于O(n^2)效率较低,因为有很多点需要重复访问. //二叉树的结点 struct BinaryTreeNode{ int m_value; BinaryTreeNode *m_lson; BinaryTreeNode *m_rson; }; //求二叉树的深度 int GetD

剑指offer38:输入一棵二叉树,求该树的深度

1 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2 思路和方法 深度优先搜索,每次得到左右子树当前最大路径,选择其中较大者并回溯.int len = left>right?left+1:right+1;    // 当前最大路径 3 C++ 核心代码 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *

笔试算法题(41):线索二叉树(Threaded Binary Tree)

出题:线索二叉树(Threaded Binary Tree) 分析: 为除第一个节点外的每个节点添加一个指向其前驱节点的指针,为除最后一个节点外的每个节点添加一个指向其后续节点的指针,通过这些额外的指针可以某种遍历方式对二叉树进行遍历,而加了这些额外指针的二叉树就是线索二叉树: 对于含有N个节点的二叉树而言,一共有2N个指针,但除了根节点的其他节点都有来自其父节点的指针,所以耗用了N-1个指针,则最终剩下2N-(N- 1)=N+1个空指针:线索二叉树就是利用这些空指针存储具有某种遍历顺序的前驱和

在路上---学习篇(一)Python 数据结构和算法 (5)二分查找、二叉树遍历

独白: 利用算法进行查找指定元素,最近学习二分查找和二叉树遍历.二分查找前提是在有序中进行查找,二叉树引入了树的概念.树的概念其中有许多小知识点,也是一种新的数据结构.还是之前的感悟,需了解其本质才会写出更好的算法. 二分查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用

N39_判断该二叉树是否是平衡二叉树。

题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. package new_offer; /** * 输入一棵二叉树,判断该二叉树是否是平衡二叉树. * @author Sonya *思路: *1.借鉴上题 求树的深度.但是效率不高 需要重复遍历结点多次. *2.后续遍历,记录每个depth 只需要遍历一次. */ public class N39_IsBalanced_Solution { public boolean IsBalanced_Solution(TreeNode root)

怎样推断一棵二叉树是全然二叉树

严蔚敏那本教材上的说法:一个深度为k,节点个数为 2^k - 1 的二叉树为满二叉树.这个概念非常好理解, 就是一棵树,深度为k,而且没有空位. 首先对满二叉树依照广度优先遍历(从左到右)的顺序进行编号. 一颗深度为k二叉树,有n个节点,然后,也对这棵树进行编号,假设全部的编号都和满二叉树相应,那么这棵树是全然二叉树. 随意的一个二叉树,都能够补成一个满二叉树.这样中间就会有非常多空洞.在广度优先遍历的时候,假设是满二叉树,或者全然二叉树,这些空洞是在广度优先的遍历的末尾,所以,但我们遍历到空洞

数据结构与算法(八)-二叉树(斜二叉树、满二叉树、完全二叉树、线索二叉树)

前言:前面了解了树的概念和基本的存储结构类型及树的分类,而在树中应用最广泛的种类是二叉树 一.简介 在树型结构中,如果每个父节点只有两个子节点,那么这样的树被称为二叉树(Binary tree).其中,一个父结点的两个字节点分别叫做“左子节点”和“右子节点”.不过也不是所有父节点都有两个子节点,只有左子节点或者只有右子节点的情况也存在.另外,也会存在叶子结点,也就是一个子节点都没有的节点,唯一的限制就是每一个节点的子节点不能超过两个. 之前谈过的单向链表,是一种通过“指向下一个元素的指针”来连接

判断对称二叉树 python代码

对称二叉树的含义非常容易理解,左右子树关于根节点对称,具体来讲,对于一颗对称二叉树的每一颗子树,以穿过根节点的直线为对称轴,左边子树的左节点=右边子树的右节点,左边子树的右节点=左边子树的左节点.所以对称二叉树的定义是针对一棵树,而判断的操作是针对节点,这时可以采取由上到下的顺序,从根节点依次向下判断,只需要递归,不需要回溯.具体代码如下. class TreeNode: def __init__(self, x): self.val = x self.left = None self.righ