HDU 3791 二叉搜尋樹(陣列實現)

2021-07-15 23:55:33 字數 1195 閱讀 8318

problem description

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

input

開始乙個數n,(1<=n<=20) 表示有n個需要判斷,n= 0 的時候輸入結束。 接下去一行是乙個序列,序列長度小於10,包含(0~9)的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。 接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組成同一顆二叉搜尋樹。

output

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

sample input

2

567432

543267

5763420

sample output

yes

no

#include #include using namespace std;

const int n=10005;

char list1[n];

char bt1[n];

void create(char list,char bt,int n){ //n表示list陣列中元素個數

int i,order;

bt[1]=list[0];

for(int i=1;i>n&&n){

cin>>list1;

memset(bt1,'a',n);

create(list1,bt1,strlen(list1));

while(n--){

char list2[n];

cin>>list2;

char bt2[n];

memset(bt2,'a',n);

create(list2,bt2,strlen(list2));

if(strcmp(bt1,bt2)==0) cout<<"yes"<

這是很經典的二叉樹的題目,如果學習資料結構方面的話,鍊錶實現其實也不是很難,但是遍歷完判斷相等時會比較麻煩,並且資料也不是很大,因此我們用陣列來實現;

建立陣列時,每個進來的點與每個結點比較(首先都要跟根結點比較),如果比該結點就讓當前編號*2 否則*2+1;

因為陣列我設定的是char陣列並且序列裡可能會有『0』,所以初始化時我將初始字元設定為『a',後面每個判斷結束的情況就是『a』;

最後利用strcmp來比較兩個字元陣列是否相等,從而得出結果。

hdu3791二叉搜尋樹

hdu3791二叉搜尋樹 又是二叉搜尋樹的前序遍歷。1.建樹會順序影響整棵樹的形狀 2.記得釋放資源 3.可以用雙重指標和引用優化程式。某些printf 是之前設定的斷點,可以無視之 includeusing namespace std struct bst root bst insert bst ...

hdu 3791 二叉搜尋樹

problem description 判斷兩序列是否為同一二叉搜尋樹序列 input 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每...

HDU 3791 二叉搜尋樹

problem description 判斷兩序列是否為同一二叉搜尋樹序列 input 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每...