zoukankan      html  css  js  c++  java
  • 第八十六题(搜索二叉树建立)

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


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


  • 相关阅读:
    Qt中的 Size Hints 和 Size Policies
    __declspec,__cdecl,__stdcall区别和作用
    深入理解DLL文件
    TCP/IP TIME_WAIT状态原理
    Linux 网络编程 高级套接字
    OpenCV 图像处理学习笔记(一)
    C++运算符重载的规则
    WinSock异步IO模型之Select
    ASSER、VERIFY、TRACE详解
    VC++ 网络编程总结(二)
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10042496.html
Copyright © 2011-2022 走看看