方法一算法思想:用后序遍历的方式遍历二叉树的每一个结点,在遍历到一个结点之前我们已经遍历了它的左右子树,只要在遍历每个结点的时候记录下它的高度,我们就可以一边遍历一边判断每个结点是不是平衡的。代码如下: 1 typedef struct BinaryTree 2 { 3 int data; ...
分类:
其他好文 时间:
2015-10-08 21:29:58
阅读次数:
261
平衡二叉树
参与人数:1135时间限制:1秒空间限制:32768K通过比例:32.36%最佳记录:0 ms|0K
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
题目链接:http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?rp=2&ru=/ta/coding-...
分类:
其他好文 时间:
2015-10-08 06:55:34
阅读次数:
147
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N..
分类:
其他好文 时间:
2015-10-06 22:19:56
阅读次数:
232
执行插入操作可能出现不平衡的情况,当平衡二叉树。AVL这树是一种自平衡二叉树,使二叉树又一次保持平衡。而且查找、插入和删除操作在平均和最坏情况下时间复杂度都是O(log n) AVL树的旋转一共同拥有四种情形。注意全部旋转情况都是环绕着使得二叉树不平衡的第一个节点展开的。1. LL型 平衡二叉树某....
分类:
其他好文 时间:
2015-10-04 20:52:35
阅读次数:
209
RB树(红黑树)并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。由于它的设计,任何不平衡都会在三次旋转之内解决。典型的用途是实现关联数组(如C++中的map和set)只有满足一下性质的树,我们才称之为红黑树:1)每个结点要么是红的,要么是黑的。2)根结点是黑的...
分类:
其他好文 时间:
2015-10-01 11:31:36
阅读次数:
366
伸展树(Splay Tree),或者叫自适应查找树,插入、查找和删除操作的时间都为O(logn)。伸展树的目的是使被查频率高的那些条目就应当经常处于靠近树根的位置。它的做法是在每次查找后,将被查找的节点splay到根节点。使用伸展树需要符合90-10法则:在实际情况中,90%的访问发生在10%的数据...
分类:
其他好文 时间:
2015-10-01 11:27:32
阅读次数:
261
AVL树(命名来源于作者姓名,Adelson-Velskii和Landis),即平衡二叉树,满足以下的条件:1)它的左子树和右子树都是AVL树2)左子树和右子树的高度差不能超过1从条件1可能看出是个递归定义。AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树插入节...
分类:
其他好文 时间:
2015-10-01 10:22:54
阅读次数:
195
参考:二叉平衡树的插入和删除操作平衡二叉树,AVL树之图解篇【查找结构3】平衡二叉查找树 [AVL]#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#de...
分类:
编程语言 时间:
2015-09-25 13:07:44
阅读次数:
380
map 是 STL 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在 map 中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里简单说一下 map 内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在 map 内部所有的数据都是有...
分类:
编程语言 时间:
2015-09-16 23:36:09
阅读次数:
300