输入一个有序的数组,如何实现将这个有序整数数组放到二叉树中?
分析:对于二叉树,可以将这个有序数组插入到二叉搜索树中,毕竟二叉搜索树还是有很多特定的。那么对于创建二叉搜索树来说,就是简单的递归了。关于树的算法设计一定要联想到递归,因为树本身就是递归的函数。
那么可以对于这个有序数组分析,将这个数组的中位数作为根节点,然后对于数组的前半部分创建一个树作为根节点的左子树,后半部分创建一个二叉搜索树作为根节点的右子树。那么就是递归调用了。
#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;
}
原文地址:http://blog.csdn.net/yusiguyuan/article/details/42393457