第八十六題(搜尋二叉樹建立)
阿新 • • 發佈:2018-11-30
如何編寫一個程式,把一個有序整數陣列放到二叉樹中?
分析:為了讓搜尋二叉樹的查詢等操作接近於O(log(n))。我們以有序陣列的中間位置的數字作為搜尋二叉樹的根節點,以其左半部分資料建立搜尋二叉樹作為根節點的左子樹。以其有半部分資料建立搜尋二叉樹作為根節點的右子樹。這是一個遞迴的定義,因此程式也採用遞迴實現。
#include<iostream> using namespace std; namespace MS100P_86 { struct BSTree { int data; BSTree* left; BSTree* right; }; BSTree* creatBSTree(int data[], int length) { if (length == 0) return NULL; int mid = length / 2; BSTree* root = new BSTree(); root->data = data[mid]; root->left = creatBSTree(data, mid); root->right = creatBSTree(data + mid + 1, length - mid - 1); return root; } void inOrderTraverse(BSTree* root) { if (root == NULL) return; inOrderTraverse(root->left); cout << root->data<<' '; inOrderTraverse(root->right); } void deleteBSTree(BSTree* root) { if (root != NULL) { delete root->left; delete root->right; delete root; } } void test() { int data[100]; for (int i = 0; i < 100; i++) data[i] = i; BSTree* root = creatBSTree(data, 100); inOrderTraverse(root); //中序遍歷結果和陣列內容一致。說明二叉查詢樹建立成功 deleteBSTree(root); } } int _tmain(int argc, _TCHAR* argv[]) { MS100P_86::test(); return 0; }