第八十六题(搜索二叉树建立)

Posted ldxsuanfa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第八十六题(搜索二叉树建立)相关的知识,希望对你有一定的参考价值。

如何编写一个程序,把一个有序整数数组放到二叉树中?


分析:为了让搜索二叉树的查找等操作接近于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;
}





以上是关于第八十六题(搜索二叉树建立)的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 前端歌谣的刷题之路-第八十六题-模板字符串

leecode第二百二十六题(翻转二叉树)

孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解

《剑指offer》第六题(重要!重建二叉树)

第八章 查找——动态表查找之平衡二叉树

第二十六篇 玩转数据结构——二分搜索树