全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总
题目1:给出下面这棵树的中序遍历结果
根据中序遍历的程序:
我们可以看到它先不断往左遍历,然后在分叉处到根节点,再往右边遍历:
首先到b,然后因为b的左边什么都没有,所以再返回到b,打印b
然后再到d,打印d,然后再到a。之后遍历右边,分别依次输出e和c
即最后结果:bdaec
题目2:非递归方法中序遍历下面这颗二叉树,其堆栈操作序列(P代表为push,O代表为pop)是什么?
首先a进栈(P),然后b进栈(P),然后再往左边走,没有东西了,所以b出栈(O)
然后b往右边走,d进栈(P),没有东西了,d出栈(O)……
最后的操作顺序:PPOPOOPPOO
题目3:已知有颗5个结点的二叉树,其前序遍历序列是a????,中序遍历序列是a????,可以断定:
-
A. 该树根结点是a,且没有左子树
-
B. 该树根结点是a,且没有右子树
-
C. 该树最左边的结点是a
-
D. 该树不存在
因为前序遍历的第一个点是根节点,中序遍历的根节点在左子树的右边,该树没有左子树。选A
题目4:假定只有四个结点A、B、C、D的二叉树,其前序遍历序列为ABCD,则下面哪个序列是不可能的中序遍历序列?
-
A. ABCD
-
B. ACDB
-
C. DCBA
-
D. DABC
A为根节点。
选项A有可能:
选项B有可能:
选项C有可能:
而选项D,分析一下,首先根据中序,A在中间,所以左子树的节点只有一个D,而右子树节点是B和C,但问题是根据前序遍历的规则,打印出A以后应该接着打印B,但是若D在左子树,B在右子树,则前序遍历不可能先打印出B再打印出D,所以这种情况不可能。
题目5:对于二叉树,如果其中序遍历结果与前序遍历结果一样,那么可以断定该二叉树________
-
A. 是完全二叉树
-
B. 所有结点都没有左儿子
-
C. 所有结点都没有右儿子
-
D. 这样的树不存在
首先我们知道如果中序和前序一样,则每个子树的根节点都是先被打印的,所以每个根节点都没有左子树。
选B
题目6:已知一二叉树的后序和中序遍历的结果分别是FDEBGCA 和FDBEACG,那么该二叉树的前序遍历结果是什么?
后序的最后一个节点是A,则树根节点是A。
根据中序结果,A前面是左子树,即FDBE,后面是右子树CG
然后再对左子树进行剖析,B为左子树的根节点,左子树的左子子树是FD,D为根节点,因为中序遍历先打印了F,所以F为左子树。
又因为中序先打印了C再打印了G,所以G是右子树
树用图表示为:
前序遍历的结果为: ABDFECG