码迷,mamicode.com
首页 > 编程语言 > 详细

如何将一个有序数组快速插入到一个二叉树中

时间:2015-01-04 17:10:58      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:c++   c语言   算法   

输入一个有序的数组,如何实现将这个有序整数数组放到二叉树中?

分析:对于二叉树,可以将这个有序数组插入到二叉搜索树中,毕竟二叉搜索树还是有很多特定的。那么对于创建二叉搜索树来说,就是简单的递归了。关于树的算法设计一定要联想到递归,因为树本身就是递归的函数。

那么可以对于这个有序数组分析,将这个数组的中位数作为根节点,然后对于数组的前半部分创建一个树作为根节点的左子树,后半部分创建一个二叉搜索树作为根节点的右子树。那么就是递归调用了。

#include <iostream>
#include <vector>
using namespace std;
/*
将一个有序数组高效地插入到二叉搜素树内 
*/
 
typedef struct Bin_tree BinTree;
struct Bin_tree
{
       int value;
       BinTree* right;
       BinTree* left;
};

void InsertFromArray(BinTree*& root,int* array,int start,int end)
{
     if(start >end)
       return ;
     root = new BinTree;
     root->left = NULL;
     root->right = NULL;
     int mid = start+(end-start)/2;
     root->value = array[mid];
     InsertFromArray(root->left,array,start,mid-1);
     InsertFromArray(root->right,array,mid+1,end);
     }
/*
  递归 中序遍历二叉树 
*/
void Inorder(BinTree* root)
{
     if(root == NULL)
       return ;
     Inorder(root->left);
     cout<<root->value<<endl;
     Inorder(root->right);
}
int main()
{
    int array[]={1,2,3,4,5,6,7,8,9};
    BinTree* root =NULL;
    InsertFromArray(root,array,0,8);
    Inorder(root);
    system("pause");
    return 0;
    
    }

再有的面试题中,还有这样类似的问题,如何将100w有些的数据插入STL内的Map中,首先是判断Map的底层实现是一个红黑树,是一种更加特殊的二叉搜索树,也可以使用上面的方法进行插入,不过需要注意的是,红黑树毕竟和二叉搜索树不完全一样,在插入过后可能造成颜色的改变





如何将一个有序数组快速插入到一个二叉树中

标签:c++   c语言   算法   

原文地址:http://blog.csdn.net/yusiguyuan/article/details/42393457

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!