1.己知头指针h指向一个带头结点的非空单循环链表,结点结构data|next,其中next是
指向直接后继结点的指针,p是尾指针,q是临时指针。现要删除该链表的第一个元素,正确
的语句序列是( ) .
A. h->next = h->next->next, q= h->next; free(q);
B. q= h->next; h->next = h->next->next; free(q),
C. q = h->next, h->next = q->next; if(p!=q)p = h; free(q),
D. q= h->next, h->next=q->next; if(p= =q)p=h; free(q);
答案:D
解析:删除该链表的第一个元素就是让你删除头结点后面的第一个结点。
普通情况:
特殊情况: 要注意当我们删除head后面的节点以后,整个链表就只剩下head节点一个了。 那尾指针只能指向head,所以D选项里的if(p= =q)p=h; free(q);就非常正确。
4.某森林F对应的二叉树为T,若T的先序遍历序列是a,b, d, c,e, g; f,中序遍历序列是b,d,a,e,g,c,f,则F中树的棵数是()。
A.1
B.2
C.3
D.4
答: C
先根据先序遍历序列和中序遍历序列还原二叉树如下:
(注:还原的办法很简单,首先看先序序列,第一个元素是a,那a就是树的根节点。 然后在中序序列中凡是a左边的元素都是左子树(所以b,d都是左子树节点),a右边的元素都是右子树(所以c,e,g,f都是右子树节点)。然后再看先序序列的第2个元素是b,所以b就是左子树的根节点)。。。。。所以还原二叉树的过程很简单,首先看先序序列的节点,然后把中序序列分成两半,然后再看先序序列后面的节点,然后再把中序序列继续分。
然后根据二叉树还原成森林,参考下面的博客https://blog.csdn.net/qq_40241957/article/details/124450065
6.给定平衡二叉树如下图所示,放入关键字23后,根中的关键字是( ) 。
A.16
B.20
C.23
D.25
答:D
参考链接https://blog.csdn.net/qsmx666/article/details/115336086