注册 登录
编程论坛 数据结构与算法

几个选择题 大家给讲下 谢谢了

情非得已 发布于 2011-05-21 23:53, 831 次点击
1 若二叉树有12个结点且度为1的个数有5个,问树叶结点有____个?[单项选择题]
A. 6  B. 5  C. 4   D. 8
2  下列程序为在一双向链表中插入一个新结点在某结点的右边,而每个结点包含三个域,依次为Link,ITEM,Rlink,在以下括号内选出正确答案:
          void dinsert (node-pointer node ,  node-pointer newnode)
            {newnode->Llink=node; newnode->Rlink=node->Rlink;____=newnode;node->Rlink=newnode;}[单项选择题]
A. node->Rlink->Llink    B. node->Llink->Rlink  C. node->Llink    D. node->Llink->Llink
3 若二叉树有10个树叶结点,试问其degree为2的结点个数有____个?[单项选择题]
           A. 8  B. 6  C. 3  D. 9
4 若二叉树有7个度为2的结点,试问有____个终端结点?[单项选择题]
          A. 8  B. 6  C. 5  d。9
5  在一个单链表中,若删除p所指结点的后继结点,则执行____。[单项选择题]
A. p->next=p->next->next;
B. p=p->next;p->next=p->next->next;
C. p->next=p->next;
D. p=p->next->next
6 、假设双链表结点的类型如下:
 typedef struct linknode
   {
      int data;                  /*数据域*/
    struct linknode  *llink,*rlink    /*llink和*rlink 是分别指向前驱结点和后续结点的指针域*/
        }bnode
    下面给出的____算法段是要把一个q所指新结点作为非空双向链表中的p所指结点的前驱结点。[单项选择题]
A. q->rlink=p;q->llink=p->llink;p->llink=q;p->llink->rlink=q;
B. p->llink=q;q->rlink=p;p->llink->rlink=q;q->llink=p->llink;
C. q->llink=p->llink;q->rlink=p;p->llink->rlink=q;p->llink=q;
D. 以上都不对
5 回复
#2
灿烂烟火2011-05-22 13:13
1.C 2.A 3.D 4.A 5.A 6.C
#3
brian19942011-05-22 14:29
这是神马题目...
#4
情非得已2011-05-22 16:30
能不能给解释下  
#5
buffer2011-05-22 18:37
回复 4楼 情非得已
2楼已给出答案了。我来解释一下吧
关于二叉树有两个重要的性质:
1)n个节点的二叉树有n-1条边
2)对任意一棵非空二叉树,若叶子节点的个数为n0,度为2的节点数为n2,则n0 = n2 + 1
关于性质1的证明,自己查数据结构或者离散数学书。
我们来证明下性质2:
设二叉树节点总数为n,那么有(n-1)条边(利用性质1)。因为二叉树节点的度只能为0,1或者2,所以
n = n0 + n1 + n2
注意到,一个度为1的节点贡献一条边,度为2的节点贡献两条边:
n - 1 = n1 + 2 * n2
由上面两个方程,我们就能推出性质2了。

这几个关于树的题都可以利用这两条性质。比如对于第一题,由性质2,我们解方程 12 = n0 + 5 + n0 - 1,可得n0 = 4

关于链表的问题自己画个图,不难理解。
#6
情非得已2011-05-22 21:38
知道了 不胜感激
1