1. 程式人生 > >第八十六題(搜尋二叉樹建立)

第八十六題(搜尋二叉樹建立)

如何編寫一個程式,把一個有序整數陣列放到二叉樹中?


分析:為了讓搜尋二叉樹的查詢等操作接近於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;
}