一、map,setset集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值;另外,还得确保根节点左子树的高度与右子树的高度相等,...
分类:
其他好文 时间:
2015-09-22 22:02:34
阅读次数:
198
1.定义一颗AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树(空树的高度定义为-1)在高度为h的AVL树中,最少节点数由S(h)=S(h-1)+S(h-2)+1给出。函数S(h)和斐波那契数相关。插入操作后把重新平衡的节点称为a。不平衡有4中情形:(1)对a的左儿子的左子树进行插入(2...
分类:
其他好文 时间:
2015-09-18 18:31:45
阅读次数:
151
这两天终于把AVL树好好理解了下,在《算法分析与设计基础》这本书中,被安排在变治法章节,是实例简化思想在查找树中的应用。它对平衡的要求是:每个节点的左右子树的高度差不超过1。从而我们只要在插入或删除节点...
分类:
编程语言 时间:
2015-09-10 21:19:43
阅读次数:
295
平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入...
分类:
其他好文 时间:
2015-09-10 20:57:26
阅读次数:
247
题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode*root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。...
分类:
其他好文 时间:
2015-09-05 17:50:52
阅读次数:
134
使用二叉搜索树可以节约搜索的时间。搜索某个节点的时间,等于该节点的深度+1。 希望文本中出现频繁的的单词和根节点较近,较少出现的单词最好能离根节点越远越好。 最优二叉搜索树的期望搜索代价最低。但是最优二叉搜索树的高度不一定是最矮的。 考虑搜索失败的问题。如果要搜索的值没有在二叉搜索树里面,就表示搜索...
分类:
其他好文 时间:
2015-09-01 10:34:25
阅读次数:
130
题目描述对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[]vals,请返回创建的二叉查找树的高度。返回高度的代码如下:import java.util.*;public class MinimalBST { public int...
分类:
其他好文 时间:
2015-08-31 23:14:31
阅读次数:
183
栈模拟非递归算法递归算法的本质是利用函数的调用栈进行,实际上我们可以自行使用栈来进行模拟,这样的算法空间复杂度为O(h),h为二叉树的高度。前序遍历首先把根节点入栈,然后在每次循环中执行以下操作:此时栈顶元素即为当前的根节点,弹出并打印当前的根节点。把当前根节点的右儿子和左儿子分别入栈(注意是右儿子...
分类:
编程语言 时间:
2015-08-30 11:07:19
阅读次数:
220
题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode*root,请返回一个bool,代表这棵树是否平衡。思想:分治法(手段) 递归(处理方法)代码如下:import java.util.*;/*publi...
分类:
其他好文 时间:
2015-08-29 13:58:53
阅读次数:
159
#include
using namespace std;
//二叉树 节点结构
typedef struct TNODE_
{
int data;
struct TNODE_*left;
struct TNODE_*right;
}TNode;
//获取树的高度=路径+1(最长路径经过的边数+1)
int GetLRDistance(TNode*t)
{
int len=0;
if(t...
分类:
其他好文 时间:
2015-08-27 21:19:46
阅读次数:
152