數據結構 二叉樹


1-1

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

正確:

后序遍歷:左右根;

中序遍歷:左根右;

(左)(根)(右) ==(左)(右)(根)

(右) = NULL --------> (左)(根)==(左)(根)

得:二叉樹任何節點一定都沒右子節點;

1-2

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

錯誤:

后序遍歷:左右根;

中序遍歷:左根右;

令 (左)=NULL

后續遍歷 (右)(根)

中序遍歷 (根)(右)

順序相反,不滿足遍歷序列相同的題目的前提

得:二叉樹中任何結點一定都無左孩子結論錯誤

 

1-3  存在一棵總共有2016個結點的二叉樹,其中有16個結點只有一個孩子。
錯誤:
沒確定是什么類型的二叉樹;
二叉樹的類型:
滿二叉樹:除最后一層無任何子節點外,每一層上的所有結點都有兩個子結點二叉樹。 

完全二叉樹:一棵二叉樹至多只有最下面的一層上的結點的度數可以小於2,並且最下層上的結點都集中在該層最左邊的若干位置上,則此二叉樹成為完全二叉樹

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

1-4 

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

錯誤:

遍歷順序:

中序遍歷 :左根右 后序遍歷 :左右根 前序遍歷 :根左右

確定了A,B都不是根節點;
根據三種遍歷順序,確認都是 左右 順序的遍歷
前序遍歷確認了 A 先於 B 被遍歷, 那么中序遍歷也必須是 A 先於 B ;

 

1-5:
若一個結點是某二叉樹的中序遍歷序列的最后一個結點,則它必是該樹的前序遍歷序列中的最后一個結點。 

 錯誤:

特例: A-B-C 一條線上,C是根節點;

中序遍歷:ABC

前序遍歷:CBA

 

 1-6

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

正確:

中序遍歷 :左根右 后序遍歷 :左右根 前序遍歷 :根左右令(左)=NULL
中序:(根)(右)==前序:(根)(右)

 
1-7

已知一棵二叉樹的先序遍歷結果是ABC, 則CAB不可能是中序遍歷結果。

正確:

遍歷比較多,強試就行:

1.找出根節點:A

2.可能的樹的類型,本題目只有兩種

3.這兩種樹的中序遍歷都不是CAB,一個是BAC,一個是CBA

 

 

節選選擇題

2-2

如果一棵非空k(k2 叉樹T中每個非葉子結點都有k個孩子,則稱T為正則k叉樹。若T的高度為h(單結點的樹h=1),則T的結點數最少為:

 

 

 


 

這不就是滿樹(h0 = h-1) 節點數 + 1嗎

這道題目是 k+k1 +k2+.....kh-2   共有 h-1 個元素

1*(kh-1-1)/(k-1) + 1,選A?

NONONO,讀題可知:

最少的情況是根節點加上根節點的k個孩子,加上根節點的第一個孩子的k個孩子,再加上'''''',以此類推;

1+k+k+k+k+k (加 h-1 個) ,答案就是(h-1)*k+1,嗯,沒有,選D;

 


2-3

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


中序遍歷 :左根右
后序遍歷 :左右根
前序遍歷 :根左右

 令(根左右)==(左根右);

令 左 =NULL,即為 (根右)==(根右),成立,成立條件是沒有左子樹,也就是只有右子樹。


 
2-4

已知一棵二叉樹的樹形如下圖所示,其后序序列為{ eacbdgf }。樹中與結點a同層的結點是:

 


 

后序遍歷:左右根

二叉樹遞歸遍歷代碼

這是前序列遍歷,其余的根據順序略微改動下位置就好、

void preorder(bintree t){
    if(t){
        printf("%c ",t->data);
        preorder(t->lchild);
        preorder(t->rchild);
    }
}

  

第一層: f

第二層: c g

第三層: a d

第四層: e b

 


 

 


 

題目可知:根節點是 4

后序遍歷序列是{ 1, 3, 2, 6, 5, 7, 4 }

中序遍歷序列是{ 1, 2, 3, 4, 5, 6, 7 }

對照進行划線;可知根節點左子樹有 3 節點,右子樹也是3節點,根據理解進行構圖

對於左子樹來說,根節點是 2 ,對右子樹來說,根節點是 7,這是根據后序遍歷確定的;

三個元素,確定了根節點,很容易的得到左子樹為:

 

三個元素,確定了根節點7,也可得到右子樹為:

中序遍歷是: 5 6 7 。可以確定,7 節點沒有右子樹,根據后序遍歷可得右子樹:

 

綜上所訴:樹為

然后就看圖回答問題;

 

完全二叉樹的定義:

子節點只有一個的節點數目只有 0 或 1 個!(簡化版定義),建議去看正規的介紹;

二叉搜索樹的定義:

左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值

即:對任何一個節點T來說:  T->Left->data  <  T->data   <   T->right->data;

 


 

2-11

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

 

遍歷順序 ,令所有遍歷中的 根==NULL 遍歷順序都是 左右,即左節點先於右節點,不會改變順序;

 

 2-xx

先序序列遍歷為 a b c d 的二叉樹有多少個?

14

運用卡特蘭算式 , n = 4 ,ans = C(n,2*n)/(n+1) = 14

 


2-16

某二叉樹的前序和后序遍歷序列正好相反,則該二叉樹一定是;

前序:NLR

后序:LRN

正好相反,只能讓R==NULL||L==NULL

應該是二叉樹的每個結點都只有一個(左或右)子樹時,先序和和后序正好相反

這道題目我對答案暫時保持懷疑:


 

 

對於函數與編程題目可能會出現的考點,進行了一個匯總:

1.二叉樹的一些操作

 

2.由二叉樹的前序遍歷(后序遍歷)和中序遍歷輸出后序遍歷(前序遍歷)

 


 

 

 

求個關注或推薦!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM