1.选择题
(1)
答案:A
(2)
(3)
同类型题目
(4) (5)(6)(7)
答案:CACC
(8)
真题再现
(9)(10)(11)
答案:DCB
(12)
(13)(14)(15)
答案:ACA
2.应用题
(1)
(2)
(3)
3.算法设计题
(1)
cppint LeafNodeCount(BiTree T) { if (T == NULL) return 0; // 空树,叶子结点数为0 else if (T->lchild == NULL && T->rchild == NULL) return 1; // 是叶子结点 else return LeafNodeCount(T->lchild) + LeafNodeCount(T->rchild); }
(2)
cppint IsEqual(BiTree T1, BiTree T2) { if (T1 == NULL && T2 == NULL) return 1; // 都为空,相等 if (T1 == NULL || T2 == NULL) return 0; // 一个为空一个非空,不相等 if (T1->data != T2->data) return 0; // 结点值不同,不相等 // 递归比较左右子树 return IsEqual(T1->lchild, T2->lchild) && IsEqual(T1->rchild, T2->rchild); }
(3)
cppvoid ChangeLR(BiTree &T) { BiTree temp; if (T == NULL) return; // 空树直接返回 if (T->lchild == NULL && T->rchild == NULL) return; // 叶子结点无需交换 // 交换左右孩子 temp = T->lchild; T->lchild = T->rchild; T->rchild = temp; // 递归处理左右子树 ChangeLR(T->lchild); ChangeLR(T->rchild); }
(4)
cpp// 双序遍历函数 void DoubleTraverse(BiTree T) { if (T == NULL) { return; // 空树,直接返回 } if (T->lchild == NULL && T->rchild == NULL) { printf("%c ", T->data); // 叶子结点,只输出一次 } else { printf("%c ", T->data); // 第一次访问根结点 DoubleTraverse(T->lchild); // 双序遍历左子树 printf("%c ", T->data); // 第二次访问根结点 DoubleTraverse(T->rchild); // 双序遍历右子树 } }
























