二元查找树(二叉排序树、二叉搜索树)
首先是一棵二元树,然后它或空或满足以下性质:
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 出现的概率会一些,两极的概率小一些。
所以说,上述判断树并不是最优的判断树。
那如何形成一个最优的判断树?首先,必须获得各判断条件出现的次数或者概率。
先判断高概率的条件,会减少总的判断次数。
最佳判断树
总结
哈夫曼树是一棵最佳判定树,即总的比较次数最少的判定树。
哈夫曼树也叫最优二叉树。
线性表就是顺序存储的表?
线性表是指除了第一个和最后一个元素外,其他元素都是首尾相连的。
注意:线性表不仅包含顺序存储的表,还包含链式存储的表。