2013 408选择题错题

1

已知三叉树T中6个叶节点的权分别是2,3,4,5,6,7,T的带权(外部)路径长度最小是:
这道题一开始让我摸不到头脑,原因在于没有构建过三叉树的哈夫曼树。
在本题中啊,我觉得可以先构造根的孩子

				Node
			a	6	7
		   4	   5		b
		   构建到这里的时候,我有一个问题,为什么2和3不能放在第二层,哈夫曼树的构造方法出错了,应该先构建最小的。

就是先选2和3,他们的父节点是5,再和4,5构成父节点14,,14再和6,7称为孩子。

2

在任意一棵非空二叉排序树T1中,删除结点v之后形成二叉排序树T2,再将v插入T2形成二叉排序树T3,下列关于T1和T3的叙述中,正确的是

写这种题吧,还得靠举例子。
啥玩意是二叉排序树,我好像有点记不清了。我说咋回事,原来我把二叉排序树和平衡二叉树弄混了。平衡二叉树有平衡因子的存在,平衡因子必须小于等于1,否则树会左倒右倒。
而二叉排序树就不一样,没有硬性规定树的形状。
二叉排序树:它是左子树结点值<根结点值<右子树结点值
它的特性就是进行中序遍历的话,会得到一个递增的有序序列。
二叉排序树的非递归查找算法:
BSTNode *BST_Search(BiTree T,ElemType key){
while(T!=NULL && key!=T->data){
if(key< T->data) T=T->lchild;
else T=T->rchild;
}
return T;
}
&&表示与,T!=NULL && key!=T->data这句的意思是
当T不为空和节点的值不等于根结点的值时,它为true,while循环里面的代码就能进行循环。
而当T为空,也就是树里没有任何东西时,直接就跳出循环了。
同样的,当key=T->data时,也就是结点的值等于根结点的值时,不用将它分给孩子。
为什么二叉排序树使用递归算法的效率就要低呢?
这一点我也没有弄懂,可能需要写代码然后运行吧。
二叉排序树的删除:
1:若被删除节点z是叶节点,则直接删除,不会破坏二叉排序树的性质。
2:若结点z只有一棵左子树或右子树,则让z的子树成为z父节点的子树,替代z的位置。
3:若结点z有左,右两棵子树,则令z的直接后继替代z,然后从二叉排序树中删去这个直接后继。
这里要解释一下直接后继,直接后继是说在中序遍历中后面的元素。

二叉排序树的查找效率分析:
二叉排序树的查找效率,主要取决于树的高度,若二叉排序树的左,右子树的高度之差的绝对值不超过1,则这样的二叉排序树称为平衡二叉树,它的平均查找长度为O(log2n)。若二叉排序树是一个只有右(左)孩子的单支树(类似于有序的单链表),则其平均查找长度为O(n)。
就维护表的有序性而言,二叉排序树无须移动结点,只需修改指针即可完成插入和删除操作,平均执行时间是O(log2n)。二分查找的对象是有序顺序表,若有插入和删除结点的操作,所花的代价是O(n)。若有序表是静态查找表,宜用顺序表作为其存储结构,而采用二分查找实现其

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值