蒟蒻 二叉搜尋樹(二叉排序樹 二叉查詢樹)學習總結

2022-04-29 20:48:09 字數 2117 閱讀 8842

二叉搜尋樹 ,它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。

二叉搜尋樹作為一種經典的資料結構,它既有鍊錶的快速插入與刪除操作的特點,又有陣列快速查詢的優勢;所以應用十分廣泛,例如在檔案系統和資料庫系統一般會採用這種資料結構進行高效率的排序與檢索操作。

#include

using

namespace std;

int n;

char a[

10001

],tree[

10001];

//a是字串,tree迴圈建樹

string pre,in,pres,ins;

/*pre和in儲存基礎字串的先序和中序;pres和ins儲存待判斷字串的先序和中序 */

inline

void

insert

(int i,

char x)

if(x>tree[i]

)insert(2

*i+1

,x);

else

insert(2

*i,x);}

inline

void

preorder

(int i)

inline

void

inorder

(int i)

inline

void

preorders

(int i)

inline

void

inorders

(int i)

intmain()

}return0;

}

(1)要判斷兩棵樹是否相同,只需要判斷兩棵樹的先序和中序(後序+中序或層序+中序都可以,但是先序+中序更簡單qwq)是否都相同,是的話說明兩棵樹相同,反之一定不相同(因為根據某序+中序可以確定唯一的樹)

(2)對於每一組資料(乙個n為一組資料):

每輸入乙個基礎字串就建樹一次,然後用兩個string:pre和in分別儲存基礎字串建樹後的先序和中序

以下依次輸入n個待判斷字串,也每次建樹一次,然後用兩個string:pres和ins分別儲存待判斷字串的先序和中序,再跟基礎字串的pre和in作比較,滿足條件就輸出「yes」,反之輸出「no」

(3)注意:因為變數是迴圈利用,所以每一次使用之後都要清零(初始化)

#include

using

namespace std;

int n;

char a[

10001

],tree[

10001];

//a是字串,tree迴圈建樹

string pre,in,pres,ins;

/*pre和in儲存基礎字串的先序和中序;pres和ins儲存待判斷字串的先序和中序 */

inline

void

insert

(int i,

char x)

if(x>tree[i]

)insert(2

*i+1

,x);

else

insert(2

*i,x);}

inline

void

preorder

(int i)

inline

void

inorder

(int i)

inline

void

preorders

(int i)

inline

void

inorders

(int i)

intmain()

}return0;

}

二叉搜尋樹(二叉排序樹)

描述 判斷兩序列是否為同一二叉搜尋樹序列 題目類別 樹 難度 中級 執行時間限制 10sec 記憶體限制 128mbyte 階段 入職前練習 輸入 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據...

二叉排序樹 二叉搜尋樹

bstree bst.h pragma once template 友元類宣告 class bstree 友元類宣告 templateclass bstnode 自定義的結點型別及特徵 bstnode type d,bstnode left null,bstnode right null 初始化 d...

二叉搜尋樹(二叉排序樹)

全部資料結構 演算法及應用課內模板 二叉搜尋樹 二叉排序樹 binary search tree bst 二叉搜尋樹很簡單,就是左子樹的所有結點的鍵值小於根結點,右子樹的所有結點的鍵值大於根結點 這樣就能使插入與搜尋達到log級別 非常簡單 稍微說一說刪除吧 刪除分兩類 合併刪除和複製刪除 1 合併...