pta7 4 是否同一棵二叉搜尋樹

2021-10-02 15:21:38 字數 3162 閱讀 9840

題目:給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。

輸入格式:

輸入包含若干組測試資料。每組資料的第1行給出兩個正整數n (≤10)和l,分別是每個序列插入元素的個數和需要檢查的序列個數。第2行給出n個以空格分隔的正整數,作為初始插入序列。最後l行,每行給出n個插入的元素,屬於l個需要檢查的序列。

簡單起見,我們保證每個插入序列都是1到n的乙個排列。當讀到n為0時,標誌輸入結束,這組資料不要處理。

輸出格式:

對每一組需要檢查的序列,如果其生成的二叉搜尋樹跟對應的初始序列生成的一樣,輸出「yes」,否則輸出「no」。

輸入樣例:

4 23 1 4 2

3 4 1 2

3 2 4 1

2 12 1

1 20

輸出樣例:

yesno

no首先要解決幾個問題:

接收輸入部分: 二叉搜尋樹的表示和建樹 。

處理部分: 判斷是否為同一顆樹

輸出用傳統的結構體來表示一棵二叉樹:

/*二叉樹的表示*/

struct treenode

;typedef

struct treenode* tree;

tree t;

建樹分成3個函式 (這裡從無到有的過程我覺得挺抽象的)

1.建立節點將讀入的資料報裹進去newnode函式

2.以第乙個建的節點為根節點,新產生的節點和根節點通過insert函式建立邏輯(子樹掛到二叉樹上)

3.maketree函式實現的功能:

建立第乙個根節點 、將兩個函式的功能整合到乙個大函式裡 。

(不會形容,意會 )

tree maketree

(int n)

return t;

}

newnode函式:

/*將資料報裹入乙個結點*/

tree newnode

(int v)

insert插入 函式 –

tree insert

(tree t,

int v)

else

else

}return t;

}

/*判斷*/

intjudgetree

(tree t,

int n)

if(flag)

return0;

else

return1;

}

【注意】 :讀入比較序列的時候:一共有n個數字在緩衝區裡

如果沒有讀完就退出,留在緩衝區的數字就會成為下一次讀取的數字 ,就會導致程式失敗,這也是為什麼設定了標誌量flag 的原因–

當發現不同結構的時候,不能直接結束函式 , 要繼續讀入!

check函式的基本思想就是二叉搜尋樹的基本操作–搜尋

int

check

(tree t,

int v)

else

if(v < t->data)

check

(t->left, v)

;else

return0;

}else

//如果不是,先判斷是不是就是要查詢的元素。

else

return0;

}}

沒有什麼好說的了。

剩下的處理函式還有 :

1.當進行下一組樹和比較序列的讀入和比較時,要先將樹節點的flag域重置為0

2.程式結束後,將申請的空間釋放掉(二叉樹的銷毀)

/*重置flag域*/

void

reset

(tree t)

/*二叉樹銷毀*/

void

freetree

(tree t)

主函式如下:

/*注意根據題目要求讀入*/

intmain()

freetree

(t);

scanf

("%d"

,&n);}

}

完整程式如下:

#include

#include

struct treenode

;typedef

struct treenode* tree;

tree t;

tree newnode

(int v)

tree insert

(tree t,

int v)

else

else

}return t;

}tree maketree

(int n)

return t;

}int

check

(tree t,

int v)

else

if(v < t->data)

check

(t->left, v)

;else

return0;

}else

else

return0;

}}intjudgetree

(tree t,

int n)

if(flag)

return0;

else

return1;

}void

reset

(tree t)

void

freetree

(tree t)

intmain()

freetree

(t);

scanf

("%d"

,&n);}

}

PTA 7 4 是否是同一棵二叉搜尋樹

總體思路 採用先序遍歷的方式來進行比較即可。靜態樹 題目描述 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸...

PTA7 4 是否同一棵二叉搜尋樹 25分

給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資料。每組資料的第1行給出兩個正整數n 10 ...

pta7 4 是否同一棵二叉搜尋樹 25分

給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資料。每組資料的第1行給出兩個正整數n 10 ...