演算法 筆試內容 樹(二)

2021-06-25 09:53:30 字數 2746 閱讀 4818

題目一:前序遍歷二叉樹值為abcdefg,下面哪個不可能是中序遍歷:

a.abcdefgb.gfedcbac.bcdefgad.bceadfg

解析:樹的遍歷分為三種:前序(根左右),中序(左根右),後序(左右根),由此可知a必為根,對於a選項的情況是該樹a處沒有左子樹,bcdefg都在a處的右子樹中,a選項可以以一種鍊錶的形式排列;對於b選項跟a選項剛好相反,a根節點沒有右子樹,只有左子樹,排列方式也是可以以單鏈表的排列的方式;對於c選項,跟b選項一樣a節點處沒有右子樹,只有左子樹,可以以鍊錶的形式排列;所以只有d不正確,因為從d選項上看bce在a的左子樹中,dfg在a的右子樹中,但從題目中可以看出搜尋出來的順序d在e之前,說明d要麼和e相連,d在a的左側部分e在a的右側部分,但是d選項都不屬於命題中的情況所以d錯。

題目二:有乙個二叉搜尋樹用來儲存字元a,b,c,d,e,f,g,h下面哪個結果是後序遍歷結果

a.adbcegfh

b.bcagehfd

c.bcaefdhg

d. bdacefhg

解析:何為二叉搜尋樹?演算法導論中的定義為:設x是二叉搜尋樹中的乙個節點。如果y是x左子樹中的乙個節點,那麼y.key <= x.key 。如果y是x右子樹中的乙個節點,那麼 y.key>=x.key。下面來看一下題目,字元abcdefgh,ascii碼中這些字元值依次遞增。可以認為這些字元一一對應於整數的 1 2 3 4 5 6 7 8 ,而後序遍歷順序為:左右根,因此最後乙個字元應該是根節點;根據反序遍歷來看每次操作的順序都是左右根,對於子樹也是如此;

a選項,該樹結構h根無右子樹只有左子樹,h根-->子根f->子根e->子根c剩下adb無法確定

b選項,該樹結構,左子樹結構d根-->a-->右側c--->左側b,右子樹結構d根--->右側f--->h 左側f無法安放ge兩個元素

c選項

d選項  左側g->f左->e左->c->bda無法區分左右故不行

題目三:下面的那個資料序列不能組成平衡二叉樹?

a. 8,-1,6,7,4,3,-2

b.20,10,16,4,30,24,31

c.7,12,3,-2,8,19,5,10

d.10,5,20,6,2,1,22,15,30

解析:對於上述的選項來講,首先要排列成

搜尋二叉樹

,然後再排列成平衡二叉樹,那麼什麼是平衡二叉樹?平衡二叉樹具有以下性質:它是一顆空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一顆平衡二叉樹。

對於a選項來講,第乙個資料為8,而且後續的資料都小於8那麼,以8為根的樹只有左子樹,且左子樹高度肯定超過1,那麼形成的樹肯定不能是平衡二叉樹。

對於bcd選項以圖為例:

b選項

c選項

d選項

題目四:如下資料結構:

typedef struct  treenode treenode;

請實現兩棵樹是否相等的比較,相等返回0不相等返回其他值。

請注意最後乙個return 中的最外面括號的作用:保證各個情況都遍歷完!!!!

int comparetree(treenode *a,treenode *b)

if(istreeanull && istreebnull)

if(a->c != b->c)

return (comparetree(a->left,b->left) & comparetree(a->left,b->rigth)| comparetree(a->left,b->rigth) & comparetree(a->rigth,b->left));

}

題目五:假設一棵二叉樹中的節點在1到1000之間,現在想要查詢數值為363的節點。下面序列中哪個不是查詢過的序列?

a.2,252,401,398,330,344,397,363.

b.924,220,911,244,898,258,362,363.

c.925,202,911,240,912,245,363.

d.2,399,387,219,266,382,381,278,363.

e.935,278,347,621,299,392,358,363.

接卸:對於a選項

對於b選項

對於c選項

對於d選項

對於e選項

演算法 筆試內容 堆與棧

在進行c 程式設計時,需要程式設計師對記憶體的了解比較精準。經常需要操作的記憶體可分為以下幾個類別 棧區 由編譯器自動分配和釋放,存放函式的引數值 區域性變數的值等,其操作的方式類似於資料結構中的棧。堆區 一般有程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由作業系統收回。主語它與資料結構...

小公尺筆試 二叉樹

有一棵合法的二叉樹,共有n個節點 1 n 1000 節點編號為 0 n 1 給定節點間的父子關係,求樹的高度。輸入 第一行乙個整數n,接下來有n 1行。每行兩個整數,以空格分隔,第乙個表示父節點編號,第二個表示子節點編號。輸出 樹的高度 樣例輸入 5 0 10 2 1 31 4樣例輸出 3 這個題的...

線段樹內容

package code.wsq.notsubmit public class segmenttree int segtree newint max len int start 0 int end arr.length 1 int node 0 構建線段樹 buildtree arr,segtree...