資料結構與演算法 樹的應用 三 二叉排序樹

2021-09-10 13:28:14 字數 3022 閱讀 2937

​ 二叉排序樹是一棵特殊的二叉樹,它是一棵二叉樹但同時滿足如下條件:對於樹上任意乙個結點,其上的數值必大於等於其左子樹上任意結點數值,必小於等於其右子樹上任意結點的數值。

​ 我們從二叉樹的插入開始了解其建樹方式,對二叉排序樹插入數字x:

若當前數為空,則x為其根節點

若當前結點大於x,則x插入其左子樹;若當前結點小於x,則x插入其右子樹;若當前結點等於x,則根據具體情況選擇插入左右子樹或者直接忽略。以插入4,2,6,1,3為例,其二叉排序樹變化情況如下圖

由於各個數字插入的順序不同,所得到的二叉排序樹的形態也很可能不同,所以不同的插入順序對二叉排序樹的形態有重要的影響。但是,所有的二叉排序樹都有乙個共同的特點:若對二叉排序樹進行中序遍歷,那麼其遍歷結果必然是乙個遞增序列,這也是二叉排序樹的來由,通過建立二叉排序樹就能對原無序序列進行排序,並實現動態維護。

題目描述:

​ 輸入一系列整數,建立二叉排序樹,並進行前序,中序,後序遍歷。

輸入:​ 輸入第一行包括乙個整數n(1<=n<=100)。接下來的一行包括n個整數。

輸出:​ 可能有多組測試資料,對於每組資料,將題目所給資料建立乙個二叉排序樹,並對二叉排序樹進行前序,中序,和後序遍歷。每種遍歷結果輸出一行。每行最後乙個資料之後有乙個空格。

樣例輸入:

516598

樣例輸出:
165

9815

6895

8961

**如下:
#include

#include

using namespace std;

struct tnodetree[

120]

;int loc =0;

tnode*

create()

tnode*

insert

(tnode *t,

int x)

else

if(x < t->data)

else

if(x > t->data)

return t;

}void

preorder

(tnode *t)

}void

inorder

(tnode *t)

}void

postorder

(tnode *t)

}int

main

(void

)preorder

(root)

; cout<

inorder

(root)

; cout<

postorder

(root)

; cout<

}return0;

}

執行結果:

​ 在學習了二叉排序樹的建立和三種方式的遍歷以後,我們還要接觸一種特殊的樹操作-判斷兩顆二叉樹是否相同。

​ 判斷兩顆樹是否相同,我們不能簡單地用某一種遍歷方式去遍歷兩棵樹,我們只需對兩棵樹進行包括中序遍歷在內的兩種遍歷,若兩種遍歷的結果都相同,那麼就可以判定兩棵樹是完全相同的。

題目描述:

​ 判斷兩序列是否為同一二叉搜尋樹序列

輸入:​ 開始乙個數n,(1<=n<=20)表示有n個需要判斷,n = 0的時候輸入結束。接下來一行是乙個序列,序列的長度小於10,包含該(0~9)的數字,沒有重複的數字,根據這個序列可以構造出一棵二叉搜尋樹。

​ 接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組成同一顆二叉搜尋樹。

輸出:​ 如果序列相同則輸出yes,否則輸出no

樣例輸入:

2

567432

543267

576342

0

樣例輸出:
yes

no

**如下:
#include

#include

#include

using namespace std;

struct tnodetree[20]

;int loc =0;

tnode *

create()

tnode *

insert

(tnode *t,

int x)

else

if(t->data > x)

else

if(t->data < x)

return t;

}char str1[20]

;int len1 =0;

char str2[20]

;int len2 =0;

char

*str;

int*len;

void

preorder

(tnode *t)

}void

inorder

(tnode *t)

}int

main()

str=str1;

len =

&len1;

preorder

(t1)

;inorder

(t1)

; str1[len1]

='\0'

;while

(n--

) str=str2;

len =

&len2;

preorder

(t2)

;inorder

(t2)

; str2[len2]

='\0';if

(strcmp

(str1,str2)==0

)else}}

return0;

}

執行結果:

資料結構 樹(三) 二叉查詢樹

二叉查詢樹的性質 例子二叉查詢樹 bst 是一種特殊的二叉樹,又稱為排序二叉樹 二叉搜尋樹 二叉排序樹。二叉查詢樹實際是一棵資料域有序的二叉樹。二叉查詢樹的遞迴定義如下 要麼二叉查詢樹是一棵空樹。要麼二叉查詢樹由根結點 左子樹 右子樹組成,其中左子樹和右子樹都是二叉查詢樹,且左子樹上所有結點的資料域...

資料結構 9 樹 三 ( 二叉樹儲存結構 )

之前已經談過了樹的儲存結構,並且說到順序儲存對樹這一種一對多的關係的結構實現起來比較困難。但是二叉樹是一種特殊的樹,由於它的特殊性,使得用順序儲存結構也可以實現。二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的結點,並且結點的儲存位置,也就是陣列的下標,要能體現結點之間的邏輯關係,如雙親與孩子的關係...

資料結構 二叉樹(三)二叉樹的深度

給定一棵二叉樹,求該二叉樹的深度 二叉樹深度定義 從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的節點個數為樹的深度 1.1輸入第一行是乙個整數n,表示二叉樹的結點個數。二叉樹結點編號從1到n,根結點為1,n 10 接下來有n行,依次對應二叉樹的n個節點。每行有兩個整數,分...