查詢二叉排序樹
阿新 • • 發佈:2021-11-12
要求在二叉排序樹中查詢指定的關鍵字,並在查詢過程中輸出查詢過程中歷經的節點。
函式介面定義:
typedef int KeyType; //定義關鍵字型別 typedef struct node //記錄型別 { KeyType key; //關鍵字項 struct node *lchild,*rchild; //左右孩子指標 } BSTNode; int ReadData(int a[]); //鍵盤輸入若干個整數,順序儲存在陣列a中,並返回輸入整數的數量。由裁判程式實現,細節不表。 BSTNode *CreatBST(KeyType A[],int n); //順序讀入陣列A中的關鍵字, 依序建立一棵二叉排序樹並返回根結點指標。由裁判程式實現,細節不表。 int SearchBST(BSTNode *bt,KeyType k) ; //在函式中輸出從根節點出發進行查詢的節點路徑 ,如果找到k,返回1,否則返回0。
裁判測試程式樣例:
int main() { BSTNode *bt = NULL; KeyType k; int a[100],N; N = ReadData( a ) ; //鍵盤輸入若干個整數,儲存在陣列a[] bt=CreatBST( a , N ); //根據陣列a,建立一棵BST樹 scanf( "%d", &k ); //輸入待查詢的關鍵字k if ( SearchBST( bt , k ) ) //在SearchBST函式中輸出從根節點出發進行查詢的節點路徑 ,如果找到k,返回1,否則返回0。 printf(":Found"); else printf(":NOT Found\n"); return 0; } /* 請在這裡填寫答案 */
輸入樣例1:
9
4 9 0 1 8 6 3 5 7
6結尾無空行
輸出樣例1:
4 9 8 6 :Found
結尾無空行
提示:在SearchBST函式中的輸出語句格式如:printf("%d ",bt->key);
輸入樣例2:
9
4 9 0 1 8 6 3 5 7
10結尾無空行
輸出樣例2:
4 9 :NOT Found
結尾無空行
提示:在SearchBST函式中的輸出語句格式如:printf("%d ",bt->key);
ANSWER
int SearchBST(BSTNode *bt,KeyType k){ if(!bt) return 0; printf("%d ",bt->key); if(k == bt->key) return 1; else if(k < bt->key) return SearchBST(bt->lchild,k);//在左子樹中繼續查詢 else return SearchBST(bt->rchild,k);//在右子樹中繼續查詢 }