🏷️ 知识点:Ds.05.04.01

共 5 道相关题目

课后题 年第 79 题 数据结构 选择题

设森林F中有4棵树,第1、2、3、4棵树的结点数分别为a、b、c和d,与森林F对应的二叉树的根结点的左子树上的结点数是(  )。

A. a B. b+c+d C. a-1 D. a+b+c

[tag_link]

正确答案:C

结论

选项 C 符合本题的树/森林规则。

推导

根的左子树表示第一棵树的全部孩子,除去第一棵树根后剩a-1个结点。

易错点

本题需区分树根与兄弟、左孩子与右兄弟,并避免把空森林套入非空森林计数公式。


课后题 年第 80 题 数据结构 选择题

设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点数为n,森林F中第一棵树的结点数是(  )。

A. m-n B. m-n-1 C. n+1 D. 条件不足,无法确定

[tag_link]

正确答案:A

结论

选项 A 符合本题的树/森林规则。

推导

根及其左子树恰为第一棵树,右子树含n个其余结点,故第一棵树大小m-n。

易错点

本题需区分树根与兄弟、左孩子与右兄弟,并避免把空森林套入非空森林计数公式。


课后题 年第 84 题 数据结构 选择题

设某树的孩子兄弟链表示中共有6个空的左指针域、7个空的右指针域,包括5个结点的左右指针域都为空,则该树中叶结点的个数是( )。

A. 7 B. 6 C. 5 D. 不能确定

[tag_link]

正确答案:B

推导

左指针为空等价于孩子兄弟表示中的叶结点;因此叶结点数为6。左右指针都为空的5个结点只是叶结点的子集,不能把更强条件误当作等价条件。

易错点

易错点是把‘左右皆空’的5误作答案,忽略叶结点只要求没有孩子。


课后题 年第 93 题 数据结构 综合题

在孩子-兄弟表示下,设计算法计算森林叶结点数。给出伪代码、不变量、正确性证明、复杂度和边界情况。

[tag_link]

参考答案

Leaves(t): 空返回0;若 firstchild(t)为空,返回 1+Leaves(nextsibling(t));否则返回 Leaves(firstchild(t))+Leaves(nextsibling(t))。空森林为0,单点为1。

推导过程

不变量:调用 Leaves(t) 返回从 t 开始的兄弟链森林叶数。无孩子时 t 是一棵树的叶,递归计入1并继续兄弟;有孩子时叶子全在孩子森林与兄弟森林,二者不交且完备。每结点至多访问常数次,时间 O(n),递归栈 O(h_cs),最坏 O(n)。

复杂度与边界

时间 O(n),递归栈 O(h_cs),最坏 O(n);空输入与单点边界已说明。

易错点

不能把 nextsibling 当作右孩子,也不能在有孩子时把当前结点计为叶。

评分要点

  • 写出核心结构对应关系或伪代码
  • 给出正确性理由
  • 给出复杂度与边界

课后题 年第 94 题 数据结构 综合题

以孩子兄弟链表为存储结构,请设计递归算法求树的深度。

[tag_link]

参考答案

对单棵树根调用:Depth(t)=0(t为空),否则 max(1+Depth(firstchild(t)), Depth(nextsibling(t)));兄弟分支不增加层数。空森林深度0,单点树深度1(若采用边高则相应整体减1)。

推导过程

递归不变量:Depth(t) 是 t 所在兄弟链森林中,从该森林根到最深结点的层数。首孩子路径增加一层,兄弟路径仍在同层取最大,故归纳成立。每结点访问一次,时间 O(n),栈 O(h_cs),最坏 O(n)。

复杂度与边界

时间 O(n),递归栈 O(h_cs),最坏 O(n);空输入与单点边界已说明。

易错点

必须明确调用语义(单棵树根或森林链)和深度按层/按边的约定;不能让兄弟递归加1。

评分要点

  • 写出核心结构对应关系或伪代码
  • 给出正确性理由
  • 给出复杂度与边界