PTA判斷是否是同一棵二叉搜尋樹

2021-10-09 02:46:44 字數 1660 閱讀 7387

思路:將第乙個序列作為初始序列建樹,然後把之後的序列的元素按順序在樹中做查詢,通過比較每次查詢過程中所遇到的節點是否在序列**現過,來判定該序列和初始序列是否是同一棵二叉搜尋樹

#include

#include

typedef

struct treenode *tree;

struct treenode

;tree maketree

(int n)

;tree newnode

(int v)

;tree insert

(tree t,

int v)

;int

check

(tree t,

int v)

;int

judge

(tree t,

int n)

;void

resett

(tree t)

;void

freetree

(tree t)

;int

main()

else

resett

(t);

//清除t中的標記flag

}freetree

(t);

scanf

("%d"

,&n);}

return0;

}tree maketree

(int n)

return t;

}tree newnode

(int v)

//建立乙個只有根節點的新樹

tree insert

(tree t,

int v)

//把新節點插入樹中

else

//如果樹不空,將新節點與根節點作比較,然後遞迴呼叫insert函式把新節點插入

else

}return t;

}int

check

(tree t,

int v)

//在樹t中查詢v,將v在t中的查詢路徑與v所在的序列相比,如果路徑**現沒遇到過的節點,則可以判定不一致

else

if(v>t->v)

//大於,查詢右子樹

else

//如果相等,說明在該序列中有乙個整數出現了第二次,則可以判定不一致

}else

//當前節點沒有被訪問過

else

//當前節點沒被訪問過,又不是要找的節點,說明碰到了乙個沒見過的節點,判定不一致 }}

intjudge

(tree t,

int n)

else

for(i=

1;iif(flag)

//不一致,返回0

else

//一致,返回1

}void

resett

(tree t)

//清除t中各節點的flag標記

if(t->right)

t->flag=0;

}void

freetree

(tree t)

//釋放t的空間

if(t->right)

free

(t);

}

判斷是否同一棵二叉搜尋樹

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

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

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

是否同一棵二叉搜尋樹

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