2482 二叉排序樹

2021-07-16 10:55:19 字數 1306 閱讀 8594

time limit: 1000ms memory limit: 65536k

二叉排序樹的定義是:或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。 今天我們要判斷兩序列是否為同一二叉排序樹

開始乙個數n,(1<=n<=20) 表示有n個需要判斷,n= 0 的時候輸入結束。

接下去一行是乙個序列,序列長度小於10,包含(0~9)的數字,沒有重複數字,根據這個序列可以構造出一顆二叉排序樹。

接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組成同一顆二叉排序樹。(資料保證不會有空樹)

2

123456789

987654321

432156789

0

no

no

這個題有

bug,我寫了兩個**,乙個**測試是yes,no,提交ac了,又寫了乙個是no,no,同樣也ac了。

簡單的講一下方法-(yes,no),原串s建樹,用插入建樹,然後前序遍歷s1,後序遍歷s2,給的模式串b分別和s,s1,s2比較,有乙個相同就輸出yes;否則輸出no;方法二,建樹,挨個比較結點;

方法—:

#include #include #include char s1[22],s2[22];

int k;

typedef char element;

typedef struct bitnnode

bitnnode, *bitree;

void createtree(bitree &t,char key)///插入比較

else///當接到空時比較key和雙親結點的大小來給左右孩子賦值;

}void peroider1(bitree t)

}void postoider2(bitree t)

}int main()

bitnnode, *bitree;

void createtree(bitree &t,char key)

else

}int compare(bitree t,bitree q)

}return 0;

}void in(bitree t)

}int main()

//in(t);

//printf("\n");

for(int i=0; i

s2[k]='\0'; for(i=0; i

2482二叉排序樹

time limit 1000ms memory limit 65536k 有疑問?點這裡 二叉排序樹的定義是 或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別...

2482 二叉排序樹

time limit 1000ms memory limit 65536kb submit statistic discuss problem description 二叉排序樹的定義是 或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的...

SDUT 2482 二叉排序樹

這個題也是比較簡單的,但悲催的我忘了把除錯用的 注釋掉,結果錯了幾遍。sad 操作步驟是這樣的 1 對第1個數字序列進行建樹操作,並儲存先序遍歷的結果。2 對後來要比較的數字序列進行建樹操作,並儲存先序遍歷結果。3 比較兩個結果是否相同。以下是 include include include typ...