日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-4 是否同一棵二叉搜索树 (25 分)

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-4 是否同一棵二叉搜索树 (25 分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

是否同一棵二叉搜索樹

1.題目描述:

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

輸入格式:
輸入包含若干組測試數據。每組數據的第1行給出兩個正整數N (≤10)和L,分別是每個序列插入元素的個數和需要檢查的序列個數。第2行給出N個以空格分隔的正整數,作為初始插入序列。最后L行,每行給出N個插入的元素,屬于L個需要檢查的序列。

簡單起見,我們保證每個插入序列都是1到N的一個排列。當讀到N為0時,標志輸入結束,這組數據不要處理。

輸出格式:
對每一組需要檢查的序列,如果其生成的二叉搜索樹跟對應的初始序列生成的一樣,輸出“Yes”,否則輸出“No”。
輸入樣例:
4 2
3 1 4 2
3 4 1 2
3 2 4 1
2 1
2 1
1 2
0
輸出樣例:
Yes
No
No

2.思路分析

//輸入數據的分析:給出 數據個數 還有幾行數據。 然后第一行是標準數據 接下來 L 行是與其做對比的 是否構成 二叉搜索樹
//操作:建立二叉搜索樹 用中序遍歷 輸出的序列是 遞增序列。
//判斷是否為 同一顆 二叉搜索樹 1.0 版本為 將其 葉節點值相加 如果相等 則是(驗證結果為失敗)
// 2.0 版本 用先序遍歷輸出的值如果都相等 則 可以證明 其 為相同的 二叉搜索樹。

3.上碼

```cpp 在這里插入代碼片//輸入數據的分析:給出 數據個數 還有 幾行數據 然后第一行是標準數據 接下來 L 行是與其做對比的 是否構成 二叉搜索樹 //思路:根據標準數據建立二叉搜索樹,然后根據輸入的數據也建立 二叉搜索樹 然后比較 葉節點的 值 是否 相等 如果不相等 則輸出 NO, 相等則輸出 YES //操作:建立二叉搜索樹 用中序遍歷 輸出的序列是 遞增序列。 //判斷是否為 同一顆 二叉搜索樹 1.0 版本為 將其 葉節點值相加 如果相等 則是(驗證結果為失敗) // 2.0 版本 用先序遍歷輸出的值如果都相等 則 可以證明 其 為相同的 二叉搜索樹。 #include<bits/stdc++.h> using namespace std; int N,flag; typedef struct TNode *Ptrtree; typedef struct TNode{int Data;Ptrtree left;Ptrtree right; }tnode; //開辟一個結點空間 Ptrtree creatNode(){Ptrtree node = new TNode;node->left = NULL;node->right = NULL;return node; } //建立二叉搜索樹 Ptrtree insert(Ptrtree root,int x){if(root == NULL){//將插入的操作視為 查找的時的操作,插入的地點視為 查找失敗的地點 在查找失敗的地點 插入一個結點root = (Ptrtree)malloc(sizeof(struct TNode));root->left = NULL;root->right = NULL;root->Data = x;return root;}if(root->Data > x){root->left = insert(root->left,x);}else if(root->Data < x){root->right = insert(root->right,x);}else{return NULL;}return root; }Ptrtree creatTree(int A[],Ptrtree root){root = NULL;int i;for(i = 0; i < N; i++){root = insert(root,A[i]);}return root; } //求取一顆二叉搜索樹的根節點 int Rootnode(Ptrtree root){if(root == NULL){return 0;}if(root->left == NULL && root->right == NULL){ //如果 一個結點的左右結點都為 空 則說明其為葉節點 return root->Data; //將其的值 返回到遞歸那部分 }return Rootnode(root->left) + Rootnode(root->right); //將其 根節點 之和求出來 } // 先序遍歷驗證建立 二叉搜索樹 是否正確。 void Preliminary(Ptrtree root1,Ptrtree root2){if(root1 && root2){//防止遞歸遍歷到 其中一個 樹是空。、if(root1->Data != root2->Data) flag = 0;Preliminary(root1->left,root2->left);Preliminary(root1->right,root2->right); } }int main(){int i,j,L,a1[100];cin>>N>>L;// Ptrtree root; // root = creatTree(a1,root);//cout<<temp<<endl;//先把標準建立起來 然后再建立需要比較的 不是同一個 就輸出 NO;while(N!=0){//輸入 標準的 二叉搜索樹for(i = 0; i < N; i++)cin>>a1[i];Ptrtree root;root = creatTree(a1,root); for(i = 0; i < L; i++ ){int a2[10]={0};for(j = 0; j < N; j++){cin>>a2[j];}Ptrtree root2;root2 = creatTree(a2,root2);flag = 1;Preliminary(root,root2);if(flag == 1)cout<<"Yes"<<endl;elsecout<<"No"<<endl; }cin>>N>>L;} } ## 4。踩的坑PTA上的第一個點 一直過不去 很無腦 ,原來是 題目 沒有看仔細 人家讓 的是多次輸入 直到 N的輸入為0 為止 才結束。 加油 陌生人。(sample 換順序。 //有Yes,有No:根不同,子樹根不同。 //樹有單邊、有雙子樹 // 這個問題是 要多次輸入 ) 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的7-4 是否同一棵二叉搜索树 (25 分)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。