1. 程式人生 > 實用技巧 >資料結構-樹習題

資料結構-樹習題

判斷題

1.關於樹和二叉樹

二叉樹是度為 2 的樹。

T F

2.具有10個葉結點的二叉樹中,有9個度為2的結點。

T F //1+9*2=9(個非葉節點)+10(個葉子節點)

3.某二叉樹的前序和中序遍歷序列正好一樣,則該二叉樹中的任何結點一定都無左孩子

T F

4.若一個結點是某二叉樹的中序遍歷序列的最後一個結點,則它必是該樹的前序遍歷序列中的最後一個結點。

T F

5.某二叉樹的前序和中序遍歷序列正好一樣,則該二叉樹中的任何結點一定都無右孩子。

T F

6.若AB都是一棵二叉樹的葉子結點,則存在這樣的二叉樹,其前序遍歷序列為...A...B...,而中序遍歷序列為...B...A...

T F

7.二叉樹的前序遍歷並不能唯一確定這棵樹,但是如果我們還知道該樹的根結點是那一個,則可以確定這棵二叉樹( )。

T F

8.將一棵完全二叉樹存於陣列中(根結點的下標為1)。則下標為23和24的兩個結點是兄弟。

T F

選擇題

1.設樹T的度為4,其中度為1、2、3、4的結點個數分別為4、2、1、1。則T中有多少個葉子結點?

A.4
B.6
C.8
D.10

2.設每個d叉樹的結點有d個指標指向子樹,有n個結點的d叉樹有多少空鏈域

A.nd
B.n(d−1)
C.n(d−1)+1
D.以上都不是

3.已知一棵二叉樹的先序遍歷結果是ABC,則以下哪個序列是不可能的中序遍歷結果:

A.ABC
B.BAC
C.CBA
D.CAB

4.給定二叉樹如下圖所示。設N代表二叉樹的根,L代表根結點的左子樹,R代表根結點的右子樹。若遍歷後的結點序列為3、1、7、5、6、2、4,則其遍歷方式是:

A.NRL
B.RNL
C.LRN
D.RLN

5.設高為h的二叉樹(規定葉子結點的高度為1)只有度為0和2的結點,則此類二叉樹的最少結點數和最多結點數分別為:

A.2h, 2h−1
B.2h−1, 2h−1
C.2h−1, 2h-1−1
D.2h-1+1, 2h−1

最少的情況為除了第一層,其他層結點個數為0;最多的情況是滿二叉樹。

6.在下述結論中,正確的是:

①只有一個結點的二叉樹的度為0;

②二叉樹的度為2;

③二叉樹的左右子樹可任意交換;//過分

④深度為K的完全二叉樹的結點個數小於或等於深度相同的滿二叉樹。

A.①④
B.②④
C.①②③
D.②③④

7.任何一棵二叉樹的葉結點在先序、中序和後序遍歷序列中的相對次序

A.發生改變
B.不發生改變
C.不能確定
D.以上都不對

8.如果二叉樹的前序遍歷結果是12345,後序遍歷結果是32541,那麼該二叉樹的中序遍歷結果是什麼?

A.23145
B.23154
C.24135
D.無法確定

能確定2和4一定是1的子節點,但無法確定3和5,先序和後序不能確定樹。//但在特殊情況下可以,如前序12345 後序23451,這個時候知道25是兄弟,34是兄弟,可以畫出來唯一的樹

9.要使一棵非空二叉樹的先序序列與中序序列相同,其所有非葉結點須滿足的條件是:

A.只有左子樹
B.只有右子樹
C.結點的度均為1//都是坑人的說法
D.結點的度均為2//都是坑人的說法

10.已知一棵二叉樹的樹形如下圖所示,其後序序列為{ e, a, c, b, d, g, f }。樹中與結點a同層的結點是:

A.c
B.d
C.f
D.g
//根據上面的說法eg兄弟 ad兄弟 cb兄弟,根據影象,知道三對兄弟,知道肯定對稱的。

11.如果二叉樹的後序遍歷結果是FDEBGCA,中序遍歷結果是FDBEACG,那麼該二叉樹的前序遍歷結果是什麼?

A.ABCDEFG
B.ABDFEGC
C.ABDFECG
D.ABDEFCG

12.已知二叉樹的後序遍歷是dabec,中序遍歷是debac,則其前序遍歷是()。

A.acbed
B.decab
C.deabc
D.cedba

13.某二叉樹的先序序列和後序序列正好相反,則下列說法錯誤的是()

A.二叉樹不存在
B.若二叉樹不為空,則二叉樹的深度等於結點數
C.若二叉樹不為空,則任一結點不能同時擁有左孩子和 右孩子
D.若二叉樹不為空,則任一結點的度均為1
//先序TLR 相反就是RLT?錯了 要知道怎麼遍歷, LR的次序都不會改變的。 要符合題意,就是R無,TL和LT就相反了,L無,TR和RT也相反了。 BCD說的都是這個意思。

14.對二叉樹的結點從1開始進行編號,要求每個結點的編號大於其左右孩子的編號,同一結點的左右孩子中,其左孩子的編號小於其右孩子的編號,可採用()遍歷實現編號。

A.中序
B.後序
C.層序
D.先序
小的編號意味著先被遍歷到,解讀題意就是 LRT後序

15.在一非空二叉樹的中序遍歷中,根結點的右邊()。

A.只有右子樹上的所有結點
B.只有右子樹上的部分結點
C.只有左子樹上的部分結點
D.只有左子樹上的全部結點

16.一棵樹可轉換成為與其對應的二叉樹,則下面敘述正確的是()。

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

森林轉樹:將樹轉換成與其對應的二叉樹,將結點的孩子放在左子樹;將結點的兄弟放在右子樹。

17.已知一棵二叉樹的先序序列和中序序列分別為GFDBHCEA和DFHBGCAE,則該二叉樹的後序序列為()。

A.DHBFAECG
B.DHBFEACG
C.DBHFAECG
D.DFAEHBCG

18.設x和y是二叉樹中的任意兩個結點,若在先序遍歷中x在y之前,而在後序遍歷中x在y之後,則x和y的關係是()。

A.x是y的左兄弟
B.x是y的右兄弟
C.x是y的祖先
D.x是y的子孫
//LRT TLR 只能是祖先了吧。

19.以下演算法的功能是()。

int function(BTreeNode* BT, ElemType x){
   int n=0;
   if(BT!=NULL)
   {   
        if(BT->data==x)   n++;
        n+= function (BT->left, x);
        n+= function (BT->right, x);
}
   return n;
}
A.求二叉樹結點個數
B.求二叉樹中值為x的結點個數
C.求二叉樹中值為x結點為根的子樹結點數
D.求二叉樹左右子樹結點數

20.以下演算法的功能是()。

void test(bitree *t)
{
   if (t) 
   {
      test(t->lchild);
      test(t->rchild);
      cout<<t->data;
   }
}
A.輸出二叉樹的根結點值
B.前序遍歷二叉樹
C.中序遍歷二叉樹
D.後序遍歷二叉樹

21.一棵有1025個結點的二叉樹的高度為多少?

A.10
B.11
C.11~1025之間
D.10~1024之間

小心不一定是完全二叉樹<-確實。

22.一棵度為4的樹中有20個度為4的結點、10個度為3的結點、1個度為2的結點和10個度為1的結點, 則葉子結點有多少個?

A.41
B.82
C.113
D.122

程式填空題

下列程式碼的功能是將二叉樹T中的結點按照層序遍歷的順序輸出。

typedef struct TreeNode *Tree;
struct TreeNode
{
int Key;
Tree Left;
Tree Right;
};

void Level_order ( Tree T )
{
Queue Q;
if ( !T ) return;
Q = CreateQueue( MaxElements );
Enqueue( T, Q );
while ( !IsEmpty( Q ) ){
T = Front_Dequeue ( Q ); /* return the front element and delete it from Q */
printf("%d ", T->Key);
if ( T->Left )
(3分);
if ( (3分) )
(3分);
}
}

//層序遍歷 根節點出隊,輸出,左邊入隊,右邊入隊。