大廠Java筆試題(二十一)

點擊上方“Coder編程”,選擇“置頂公衆號”

技術文章第一時間送達!

筆試

每天進步一點,不做curd工程師與Api調用工程師
歡迎訪問個人博客網站:https://www.coder-programming.cn/

1.即使對不含相同元素的同一輸入序列進行兩組不同的合法的入棧和出棧組合操作,所得的輸出序列也一定相同()

A.對
B.錯

答案:
B

解析:
如序列abcd
①:push a ,push b ,push c ,push d  ,pop,pop,pop,pop  得到的序列是dcba
②:push a, pop ,push b,pop,push c,pop ,push d,pop    得到的序列是abcd

2.設某棵三叉樹中有40個結點,則該三叉樹的最小高度爲()。

A.3
B.4
C.5
D.6

答案:
B

解析:
對於高度的理解,我們不管他數據結構什麼什麼知識,就拿樓房來說,假如一個人提問:樓房的高度有好高?我們會下意識的從底層開始往上數,假如樓有6層,則我們會說,這個樓有6層樓那麼高,則提問者就會大概知道樓有多高了。所以高度就是以從下往上對比,這是我們的習慣。而在樹中,樹的高度也是從下往上數,如圖所示

1

K節點在樹的底層,是一個葉子節點,則一般定義爲K的高度在最低爲1,以此類推,O的高度也是爲1,P的節點也是爲1。M節點是葉子節點O的父節點,從下往上數,M節點高度爲2。那麼G節點的高度是多少呢?從G-L的高度爲2,從G-M-O節點高度爲3,到底G節點高度爲多少呢,正確答案是3,請看定義:
高度的定義爲:從結點x向下到某個葉結點最長簡單路徑中邊的條數

注意:對於是否是邊的條數這個不清楚,待我後來查證,這個主要是由於其初值是1還是0來確定的,一般都是以1開始

希望高度最小,則是滿三叉樹的情況,1,3,9,27

3.紅黑樹中已經有n個數據,尋找某個key是否存在的時間複雜度爲()。

A.o(logn)
B.o(n)
C.o(n二次方)
D.o(1)

答案:
A

解析:
紅黑樹是平衡二叉樹,也就是左右子樹是平衡的,高度大概相等。
這種情況等價於一塊完全二叉樹的高度,查找的時間複雜度是樹的高度,爲logn

4.若一棵二叉樹具有8個度爲2的結點,5個度爲1的結點,則度爲0的結點個數是?

A.6
B.9
C.11
D.不確定

答案:
B

解析:

題中度爲2指的是有兩個子節點, 度爲1是1個子節點
假設度0的節點有x個
那個二叉樹的邊, 按照出節點來算個數爲
82 + 51
按照入節點來算, 個數爲
8+5+x-1(減去根節點)
邊是一定的, 所以
82 + 51 =  8+5+x-1
x = 9

5.在任意一棵非空二叉排序樹中,刪除某結點後又將其插入,則所得二排序叉樹與原二排序叉樹相同。()

A.正確
B.錯誤

答案:
B

解析:
只有被刪除結點是葉子結點時命題才正確。

6.數組A中,每個元素的長度爲3個字節,行下標i從1到8,列下標j從1到10,從首地址SA開始連續存放在存儲器內,該數組按行存放時,元素A[8][5]的起始地址爲( )。

A.SA+141
B.SA+144
C.SA+222
D.SA+225

答案:
C

解析:
陷阱:起始地址爲上一地址的結束

首先,本題的數組是從A[1][1]開始的,也就是說和所謂的數組從零開始沒什麼關係。
A[1][1]的起始地址爲SA,那麼A[1][2]爲SA+3…..A[2][1]爲SA+310…..A[i][j]爲SA+((i-1)10+(j-1))3。那麼A[8][5]的起始地址就是SA+(710+4)*3=SA+222.

7.對於雙向循環鏈表,在p指針所指的結點之後插入s指針所指結點的操作應爲()

A.p->right=s;s->left=p;p->right->left=s;s->right=p->right;
B.p->right=s;p->right->left=s;s->left=p;s->right=p->right;
C.s->left=p;s->right=p->right;p->right=s;p->right->left=s;
D.s->left=p;s->right=p->right;p->right->left=s;p->right=s;

答案:
D

解析:
雙向鏈表的插入順序:先搞定插入節點的前驅和後繼,在搞定後結點的前驅,最後搞定前結點的後繼。

8.不帶頭結點的單鏈表head爲空的判定條件是()?

A.head==NULL
B.head->next==NULL
C.head!=NULL
D.head->next==head

答案:
A

解析:
所爲頭結點,是爲了使空鏈表和非空鏈表的處理統一而在鏈表的頭部增加的一個節點,這樣無論鏈表是否爲空,頭指針都指向頭結點,頭結點中不存數據而只是存放指向第一個節點的指針。沒有頭結點的鏈表,頭指針就指向第一個節點。因此,單鏈表爲空時,head==NULL。

9.樹的基本遍歷策略分爲先根遍歷和後根遍歷;二叉樹的基本遍歷策略可分爲先序遍歷、中序遍歷和後序遍歷。結論()是正確的?

A.樹的先根遍歷序列與其對應的二叉樹的先序遍歷序列相同
B.樹的後根遍歷序列與其對應的二叉樹的先序遍歷序列相同
C.樹的先根遍歷序列與其對應的二叉樹的中序遍歷序列相同
D.以上都不對

答案:
A

解析:
一般樹的先根序遍歷與對應的二叉樹的先根序遍歷序列一致,後根序遍歷與對應二叉樹的中根序遍歷序列相同

10.已知二叉樹中有45個葉節點,有25個度爲1的節點,則二叉樹的總結點數爲__

A.112
B.113
C.114
D.115
E.116
F.117

答案:
C

解析:
二叉樹的性質n0=n2+1的推導:所有節點=n0+n1+n2(即度爲0+1+2的節點)=2*n2+n1+1(即分支總數+1)
所以n=n0+n1+n2=44+45+25=114

11.節點按中序遍歷爲syz的二叉樹可能有()種

A.2
B.3
C.4
D.5

答案:
D

解析:
完全二叉樹一種,全爲左和全爲右枝各一種,根左右和根右左各一種
分別以S Y Z爲根  S爲根有2種  Y爲根有1種  Z爲根有2種

12. 分別以下列序列構造二叉排序樹,與用其它三個序列所構造的結果不同的是()

A.(100,80,90,60,120,110,130)
B.(100,120,110,130,80,60,90)
C.(100,60,80,90,120,110,130)
D.(100,80,60,90,120,130,110)

答案:
C

解析:

2.png

根據序列構造二叉排序樹後 ABD都是滿二叉樹 C不是 所以選C

13.哈希查找中k個關鍵字具有同一哈希值,若用線性探測法將這k個關鍵字對應的記錄存入哈希表中,至少要進行(    )次探測。

A.k
B.k+1
C.k(k+1)/2
D.1+k(k+1)/2

答案:
C

解析:
問的是“至少”,那麼設表原來爲空表。
第一個:直接找到坑,入坑,1次;
第二個:和第一個同hash,找到坑被第一個給佔了,找下一個,入坑,2次;
第三個:第一個被佔了,第二個也被佔了,找第三個,入坑,3次;
。。。
第n個:n次;
一共:(1+n)n / 2 次 【開放地址法(除了隨機探測)都是(1+n)n / 2 次】

14.在圖採用鄰接表存儲時,求最小生成樹的Prim算法的時間複雜度爲()

A.O(n)
B.O(n+e)
C.O(n^2)
D.O(n^3)

答案:
B

解析:
Prim算法的時間複雜度    
鄰接表存儲時,是 O(n+e)
圖的時候 是O(n^2)

15.高度爲1的平衡二叉樹節點爲1個,高度爲5的最少多少個?

A.10
B.11
C.12
D.13

答案:
C

解析:
平衡二叉樹是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。

高度爲5的話, 根的左子樹高4, 右子樹高3
經推倒可以得出,高度與最小節點數對應關係是:
1 -> 1
2 -> 2
3 -> 4
4 -> 7
5 -> 12

16.一個有n個結點的連通圖的生成樹是原圖的最小連通子圖,且包含原圖中所有n個結點,並且有保持圖聯通的最少的邊。最大生成樹就是權和最大生成樹,現在給出一個無向帶權圖的鄰接矩陣,權爲0表示沒有邊。{{0,4,5,0,3},{4,0,4,2,3},{5,4,0,2,0},{0,2,2,0,1},{3,3,0,1,0}},求這個圖的最大生成樹的權和。

A.11
B.12
C.13
D.14
E.15

答案:
D

解析:

3

17.向一個棧頂指針爲hs的鏈棧中插入一個s結點時,應執行__

A.hs->next=s;
B.s->next=hs;   hs=s;
C.s->next=hs->next;hs->next=s;
D.s->next=hs; hs=hs->next;

答案:
B

解析:
往棧中插入數據,棧是向下生長的,由高地址到低地址,所以s節點就是在低地址處,hs指向原棧頂,插入s後,s是新的棧頂,s的地址比原棧頂hs地址低,所以是s->next=hs,最後hs=s更新棧頂指針指向

18.根據使用頻率爲 5 個字符設計的哈夫曼編碼不可能是( )。

A.000,001,010,011,1
B.0000,0001,001,01,1
C.000,001,01,10,11
D.00,100,101,110,111

答案:
D

解析:
哈夫曼樹的節點要麼是葉子節點,要麼是度爲2的節點,不可能出現度爲1的節點

19.一棵左子樹爲空的二叉樹在前序線索化後,其中空的鏈域的個數是()

A.不確定
B.0
C.1
D.2

答案:
D

解析:
一棵左子樹爲空的二叉樹,形態爲右單支樹,這樣前序序列爲根、右根…
因爲根結點在前序序列第一個,沒有前序的前驅,這樣根結點的左指針鏈域就是空的
最下邊的葉子(也就是最右邊結點)是前序序列最後一個,沒有前序的後繼,因此該結點的右指針鏈域也是空的
因此,空的鏈域合計2個

20.數組指針和指針數組有什麼區別 ?

A.數組指針只是一個指針變量,它佔有內存中一個指針的存儲空間
B.指針數組只是一個指針變量,它佔有內存中一個指針的存儲空間
C.指針數組是多個指針變量,以數組形式存在內存當中,佔有多個指針的存儲空間
D.數組指針是多個指針變量,以數組形式存在內存當中,佔有多個指針的存儲空間

答案:
AC

解析:
數組指針只是一個指針變量,指向一個一維數組,它佔有內存中一個指針的存儲空間,指針數組是多個指針變量,以數組形式存在內存當中,佔有多個指針的存儲空間。

推薦

文末

文章收錄至
Github: https://github.com/CoderMerlin/coder-programming
Gitee: https://gitee.com/573059382/coder-programming
歡迎關注並star~

微信公衆號

                我知道你 “在看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章