【复】判断树的平衡,

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isBalanced(TreeNode root) {
        if(root==null) return true;
        int d1=depth(root.right);
        int d2=depth(root.left);
        if(Math.abs(d1-d2)>1) return false;
        else  return isBalanced(root.left)&&isBalanced(root.right);

    }

    public int depth(TreeNode node)
    {
        if(node==null) return 0;
        int d1=depth(node.right);
        int d2=depth(node.left);

        int max=d1>d2?d1:d2;
        return  max+1;

    }

}

2.求高度的时候在不平衡的时候返回-1就ok了,不用求高度,但是效率好像没啥变化

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    private boolean ans=true;
    public boolean isBalanced(TreeNode root) {
        if(root==null) return true;
        if(depth(root)==-1) return false;
        return true;

    }

    public int depth(TreeNode node)
    {
        if(node==null) return 0;
        int d1=depth(node.right);
        int d2=depth(node.left);
        if(d1==-1||d2==-1) return -1;
        if(Math.abs(d1-d2)>1) return -1;

        return  Math.max(d1,d2)+1;

    }

}

【复】判断树的平衡,

时间: 2024-08-24 13:15:19

【复】判断树的平衡,的相关文章

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B

判断二叉树是否平衡

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 注:这里不考虑该二叉树是否是二叉排序树 解决要点: 1.后序遍历二叉树: 2.递归. 核心算法: bool isBalanced(pTree pT,int *depth) { if(!pT)//参数判断 { *depth = 0; return true; } //后序遍历 int left,right; if(isBalanced(pT->lChild,&

AVL树(平衡二叉查找树)

首先要说AVL树,我们就必须先说二叉查找树,先介绍二叉查找树的一些特性,然后我们再来说平衡树的一些特性,结合这些特性,然后来介绍AVL树. 一.二叉查找树 1.二叉树查找树的相关特征定义 二叉树查找树,又叫二叉搜索树,是一种有顺序有规律的树结构.它可以有以下几个特征来定义它: (1)首先它是一个二叉树,具备二叉树的所有特性,他可以有左右子节点(左右孩子),可以进行插入,删除,遍历等操作: (2)如果根节点有左子树,则左子树上的所有节点的值均小于根节点上的值,如果根节点有右子树,则有字数上的所有节

AVL树-自平衡二叉查找树(Java实现)

在计算机科学中,AVL树是最先发明的自平衡二叉查找树.AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An algorithm for the organization of information" 中发表了它. 一.AVL树的旋转规律 AVL树的基本操作一般涉及运做同在不平衡的二叉查找树所运做的同样的算法.但是要进行预先或随后做一次或多次所谓的"AVL旋转". 假设由于在二叉排序树上插入

(015)实现一个函数检查一棵树是否平衡(keep it up)

实现一个函数检查一棵树是否平衡.对于这个问题而言, 平衡指的是这棵树任意两个叶子结点到根结点的距离之差不大于1. 这个题我们可以采用暴力搜索,找到叶子节点到根节点的最小值和最大值,然后他们的差如果大于1就不是平衡树,反之 则是平衡树. int MinDepth = std::numeric_limits<int>::max(); int MaxDepth = std::numeric_limits<int>::min(); struct TreeNode { int data; T

判断树、判断表

判断表: 判断树

leecode 树的平衡判定 java

以前写过c++版本的,感觉java写的好舒心啊/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public boolean isBalanced(TreeNode root) { if(root==null) re

判断是否AVL平衡二叉书

#include<iostream> #include<vector> #include<stack> #include<string> #include<queue> #include<algorithm> #include<numeric> using namespace std; class node{ public: int val; node* left; node* right; node():val(0),l

树的平衡 AVL Tree

本篇随笔主要从以下三个方面介绍树的平衡: 1):BST不平衡问题 2):BST 旋转 3):AVL Tree 一:BST不平衡问题的解析 之前有提过普通BST的一些一些缺点,例如BST的高度是介于lgN和N之间的,如果是N的的话,显然效率很低,不是我们需要的:但是在实际情况中,BST的高度h = N的情况却经常出现,例如下图所示.在BST中search,insert的running time都等于BST的高度h,我们肯定希望高度h越小越好,best case就是lgN.下图的example 2的