您的位置:首页 > 理论基础 > 数据结构算法

数据结构 - ★知识点

2016-04-03 14:24 330 查看
二元查找树(二叉排序树、二叉搜索树)

首先是一棵二元树,然后它或空或满足以下性质:

1  若左子树不空,则左子树上所有结点的值均小于根的值;

2  若右子树不空,则右子树上所有结点的值均大于根 的值;

3  左右子树也都是二元查找树。

有n个分支结点的满二叉树的深度是多少?

设深度为 h ,则满二叉树的叶子有 2^(h-1) ,总节点数为2^h ,所以 n =  2^h - 2^(h-1) - 1。

h = log(n+1) + 1

哈夫曼树 ( Huffman )

        在很多问题的处理过程中,我们需要进行大量的条件判断,而这些判断结构的设计直接影响着程序的执行效率。

例如:
if(score<60)
cout<<"Bad"<<endl;
else if(score<70)
cout<<"Pass"<<endl
else if(score<80)
cout<<"General"<<endl;
else if(score<90)
cout<<"Good"<<endl;
else
cout<<"Very good!"<<endl;
上述判断语句形成的判断树



在实际中,学生成绩在五个等级上的分布是不均匀的。一般来说,70~90 出现的概率会一些,两极的概率小一些。

所以说,上述判断树并不是最优的判断树。

那如何形成一个最优的判断树?首先,必须获得各判断条件出现的次数或者概率。



先判断高概率的条件,会减少总的判断次数。

最佳判断树



总结

哈夫曼树是一棵最佳判定树,即总的比较次数最少的判定树。

哈夫曼树也叫最优二叉树。

线性表就是顺序存储的表?

线性表是指除了第一个和最后一个元素外,其他元素都是首尾相连的。

注意:线性表不仅包含顺序存储的表,还包含链式存储的表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: