样题1. 己知整数a, b,假设函数succ(x)=x+1, pred(x)=x-1,不许直接用“+”,“-”运算符号,也不许用循环语句,只能利用函数succ()和pred(),试编写计算a+b, a-b的递归函数add(a,b), sub(a,b), 并在主程序中验证该函数的正确性。
样题9. 己知二叉树中的结点类用BinTreeNoed表示,被定义为:
struct BinTreeNoed {char data; BinTreeNode *leftChild, *rightChild;};
其中data为结点值域,leftChild和rightChild分别为指向左、右子女结合点的指针域,根据下面函数声明编写出求一棵二叉树高度的函数代码,并编写主程序验证,该高度由函数返回。假定根结点的层次为0,参数BT初始指向这棵二叉树的根结点。
int BTreeHeight (BinTreeNode *BT);
样题13. 设两个初始归并段为:(10, 15, 31, 9, 20), (22, 34, 37, 6, 15, 42), 请编写程序merge实现两路归并算法。
样题14. 在二叉搜索树上删除一个有两个子女的结点时,可以采用以下方案:用左子树TL上具有最大关键码的结点,或者用右子树TR上具有最小关键码的结点顶替,再递归地删除适当的结点。随机选择其中一个方案,并编写程序实现这个删除方法。
样题17. 编写程序,要求能根据读入的数据构造有向图G, 并输出G的DFS遍历序列(从V0开始),图的输入形式为nV0 Vi0 V1 Vi1 V2 Vi2…Vi Vin-1-1(-1,-1输入结束标记,其余的值都>=0且<n),它们都是整数,且100>n>0。