九度OJ 1009 二叉搜尋樹

2021-07-26 12:52:35 字數 2449 閱讀 5433

本題演算法的基本思路如下:

①對源序列建樹。

②對目標序列建樹。

③將isequ標誌置true。

④對源序列與目標序列分別先序遍歷,並引入兩個棧結構在遞迴遍歷時不斷壓入各自的遍歷序列。

⑤對兩個棧進行比對,若出現不同則isequ=false。

⑥使用相同的方法得到兩個中序遍歷序列並比對。

⑦輸出結果。

有如下收穫:

①判斷兩棵二叉樹是否相同,只要分別比對他們的先序和中序序列。包括中序在內的兩種遍歷結果可以唯一確定一棵二叉樹。

②在樹的遍歷中想要記錄下遍歷到的結點的data,使用陣列的話要輔以乙個游標記錄位置,並且此游標必須要在函式之外初始化,十分的麻煩。這時可以引入棧結構,每次遞迴呼叫只需壓棧即可。(佇列同理)

③二叉樹的一種很重要的實現方式:直接使用elem陣列而非struct結構體來表示二叉樹,用下標作為游標代替左右指標。i結點的左子樹下標即2i,右即2i+1。

此法的前提條件:二叉樹的密度必須大,即不能是稀疏樹。否則空間利用率將會極低,從而在處理層數較多的bst(如單支樹)時造成記憶體超載。

此法的優點(較之結構體實現方式):

1.免去了結點記憶體空間的申請、清理等,大大提公升了程式時空效率,減小了**量。

綜上,在條件允許的情況之下(最壞情況下不會造成記憶體過載),盡量使用此法,可以大大提公升效率,精簡**。判斷合適與否的方式:譬如此題,最多只有10個結點,最壞情況下共10層(單支樹),在陣列實現方式下需要2^10-1=1023大小的陣列,在可接受範圍之內。

題目描述:判斷兩序列是否為同一二叉搜尋樹序列

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

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

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

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

樣例輸入:

2

567432

543267

576342

0

樣例輸出:

yes

no

2023年浙江大學計算機及軟體工程研究生機試真題

答疑:

鏈式結構實現如下:

#include #include #include using namespace std;

typedef struct binode*bitree;

bitree createnode(int x);

bitree insertnode(bitree &t,int x);

void freetree(bitree &t);

void printtree(bitree t);

void preorder(bitree t,stack&seq);

void inorder(bitree t,stack&seq);

int main()

//n line comparing

for (int index=0;index>s;

//createtree u

for (int i=0;s[i]!='\0';i++)

//compare

//initiate stack

while (!seqt.empty())

while (!seqt.empty())

//preorder

preorder(t,seqt);

preorder(u,sequ);

while (!seqt.empty())

seqt.pop();

sequ.pop();

}//initiate stack

while (!seqt.empty())

while (!seqt.empty())

//inorder

if (isequ==true)

seqt.pop();

sequ.pop();}}

//cout

if (isequ==true)

cout<<"yes"rc=null;

t->data=x;

return t;

}bitree insertnode(bitree &t,int x)

else

}void freetree(bitree &t)

}void printtree(bitree t)

}void preorder(bitree t,stack&seq)

}void inorder(bitree t,stack&seq)

}

九度OJ 1009 二叉搜尋樹

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

九度OJ 題目1009 二叉搜尋樹

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

題目1009 二叉搜尋樹

題目1009 二叉搜尋樹 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 7634 解決 3374 題目描述 判斷兩序列是否為同一二叉搜尋樹序列 輸入 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒...