第八十六题(搜索二叉树建立)
如何编写一个程序,把一个有序整数数组放到二叉树中?
分析:为了让搜索二叉树的查找等操作接近于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;
}