思路:將第乙個序列作為初始序列建樹,然後把之後的序列的元素按順序在樹中做查詢,通過比較每次查詢過程中所遇到的節點是否在序列**現過,來判定該序列和初始序列是否是同一棵二叉搜尋樹
#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分 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資料。每...