算法——————笔试内容--->树(二)

题目一:前序遍历二叉树值为abcdefg,下面哪个不可能是中序遍历:

A.abcdefg B.gfedcbaC.bcdefgaD.bceadfg


解析:树的遍历分为三种:前序(根左右),中序(左根右),后序(左右根),由此可知a必为根,对于A选项的情况是该树a处没有左子树,bcdefg都在a处的右子树中,A选项可以以一种链表的形式排列;对于B选项跟A选项刚好相反,a根节点没有右子树,只有左子树,排列方式也是可以以单链表的排列的方式;对于C选项,跟B选项一样a节点处没有右子树,只有左子树,可以以链表的形式排列;所以只有D不正确,因为从D选项上看bce在a的左子树中,dfg在a的右子树中,但从题目中可以看出搜索出来的顺序d在e之前,说明d要么和e相连,d在a的左侧部分e在a的右侧部分,但是D选项都不属于命题中的情况所以D错。


题目二:有一个二叉搜索树用来存储字符A,B,C,D,E,F,G,H下面哪个结果是后序遍历结果

A. ADBCEGFHB.BCAGEHFD C.BCAEFDHGD. BDACEFHG


解析:何为二叉搜索树?算法导论中的定义为:设x是二叉搜索树中的一个节点。如果y是x左子树中的一个节点,那么y.key <= x.key 。如果y是x右子树中的一个节点,那么 y.key>=x.key。下面来看一下题目,字符ABCDEFGH,ascii码中这些字符值依次递增。可以认为这些字符一一对应于整数的 1 2 3 4 5 6 7 8 ,而后序遍历顺序为:左右根,因此最后一个字符应该是根节点;根据反序遍历来看每次操作的顺序都是左右根,对于子树也是如此;

A选项,该树结构H根无右子树只有左子树,H根-->子根F->子根E->子根C剩下ADB无法确定

B选项,该树结构,左子树结构D根-->A-->右侧C--->左侧B,右子树结构D根--->右侧F--->H 左侧F无法安放GE两个元素

C选项


D选项  左侧G->F左->E左->C->BDA无法区分左右故不行


题目三:下面的那个数据序列不能组成平衡二叉树?

A. 8,-1,6,7,4,3,-2

B.20,10,16,4,30,24,31

C.7,12,3,-2,8,19,5,10

D.10,5,20,6,2,1,22,15,30


解析:对于上述的选项来讲,首先要排列成搜索二叉树,然后再排列成平衡二叉树,那么什么是平衡二叉树?平衡二叉树具有以下性质:它是一颗空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。

对于A选项来讲,第一个数据为8,而且后续的数据都小于8那么,以8为根的树只有左子树,且左子树高度肯定超过1,那么形成的树肯定不能是平衡二叉树。

对于BCD选项以图为例:

B选项


C选项


D选项


题目四:如下数据结构:

typedef struct  TreeNode{

char c;

TreeNode *left;

TreeNode *right;

} TreeNode;

请实现两棵树是否相等的比较,相等返回0不相等返回其他值。

请注意最后一个return 中的最外面括号的作用:保证各个情况都遍历完!!!!

int CompareTree(TreeNode *A,TreeNode *B){
	int isTreeAnull = (A==NULL);
	int isTreeBnull = (B==NULL);
	if(isTreeAnull != isTreeBnull){
		return 1;
	}
	if(isTreeAnull && isTreeBnull){
		return 0;
	}
	if(A->c != B->c){
		return 1;
	}

	return (CompareTree(A->left,B->left) & CompareTree(A->left,B->rigth)| CompareTree(A->left,B->rigth) & CompareTree(A->rigth,B->left));
}

题目五:假设一棵二叉树中的节点在1到1000之间,现在想要查找数值为363的节点。下面序列中哪个不是查找过的序列?

a.2,252,401,398,330,344,397,363.

b.924,220,911,244,898,258,362,363.

c.925,202,911,240,912,245,363.

d.2,399,387,219,266,382,381,278,363.

e.935,278,347,621,299,392,358,363.

接卸:

对于a选项

 

对于b选项


对于c选项


对于d选项


对于e选项

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值