给定数组,如何快速建立查找二叉树
来源:互联网 发布:java中文模糊匹配算法 编辑:程序博客网 时间:2024/05/21 10:41
二叉树查找一直以来是效率较高的查找方式,现在我们从基础开始,假如给定一个数组,如何根据数组建立二叉树 ?
转载请注明出处: http://blog.csdn.net/elfprincexu
现附上截图:
简单的策略:
1. 将数组从小到大进行排序, 这里使用std::sort 函数, 自定义mycomp 比较函数,从小到大进行排序。
2. 排序后的数组从小到大,查找二叉树应该是始终是左小右大的规律
3. 递归算法,每次去数组中间数作为parent, 将剩下的左右数组做递归 (递归终止条件为子数组长度<=0)。
模板:
由于数组中可能有int , double, float类型, 因此采用模板函数。
附上源码,亲测可Run...
#include <vector>
#include <Windows.h>
#include <algorithm>
using namespace std;
template <class T>
struct node {
T data;
struct node<T>* left;
struct node<T>* right;
};
typedef node<int> IntNode;
typedef node<double> DoubleNode;
typedef node<float> FloatNode;
template<class T>
void buildTree( node<T>*& root, vector<T>& array, int begin, int end) // here we use a reference pointer root
{
if (begin>end ) return; // ending condition
int middle =(begin+end)/2;
if (root == NULL)
{
root = new node<T>(); // create a new node, if not root, has its parent
root->left = NULL; // set null to left
root->right = NULL;
root->data =array[middle];
}
cout<< root->data << " ";
Sleep(50);
// recursively build left child and right child
buildTree(root->left,array,begin,middle-1);
buildTree(root->right,array,middle+1,end);
}
template <class T>
int mycmp(T a, T b)
{
return a < b;
}
template <class T>
void travel(node<T>* root)
{
if (root !=NULL )
{
travel(root->left);
cout<< root->data <<" ";
travel(root->right);
}
}
int main()
{
vector<int> array(100);
for (unsigned int i=0 ;i< array.size() ; i++) {
array[i] = i;
}
sort(array.begin(), array.end(),mycmp<int>);
for (unsigned int i=0 ;i< array.size() ; i++) {
cout<< array[i] << " ";
}
cout << endl;
cout << "Building Tree..." <<endl;
IntNode* root= NULL;
buildTree(root, array, 0, array.size()-1);
cout<<endl;
cout<<"middle travel begins"<<endl;
cout<< "root: " << root << " root->data: " << root->data << endl;
travel(root);
cout<< endl;
return 0;
}
0 0
- 给定数组,如何快速建立查找二叉树
- 给定有序数组,创建高度最小的二叉查找树
- 给定数组求二叉查找树并返回高度
- 二叉树快速查找
- 数组建立二叉树
- 给定一个递增有序数组,要求构建一棵具有最小高度的二叉查找树
- 二叉树建立与查找
- 二叉查找树的建立
- 二叉查找树的建立,遍历,查找
- 如何建立二叉树
- 程序员面试金典: 9.4树与图 4.3给定一个有序整数数组,元素各不相同且按升序排列,创建一颗高度最小的二叉查找树。 ---快速解法
- 算法导论第十二章关于搜索二叉树的建立,查询,查找最大最小元素值,查找给定结点的直接后继
- 数组建立二叉搜索树
- 给定一个有序数组,元素各不相同且升序排列,创建一个高度最小的二叉查找树
- [Java]给定一个递增有序数组,要求构建一棵具有最小高度的二叉查找树
- 按给定的表达式建立相应的二叉树 急急
- 数组实现二叉查找树
- 判断给定的二叉树是否为二分查找树
- android <include/>标签和 <merge/>标签的使用
- OCP 1Z0 052 137
- SWTBOK测试实践系列(6) -- 开发人员为什么不做静态分析?
- AMD编程手册小译
- MySQL架构探讨
- 给定数组,如何快速建立查找二叉树
- 从今天起开始学习intel汇编(三) 过程
- 重新安装mysql最后出现startService未响应解决方法
- SQLite + ListView分页技术
- Linux下软件发布技巧
- 功能设计源码以及思路-图片上传篇
- 转]linux中cut的使用
- 更改myeclipse默认工作空间
- HDU 1051 Wooden Sticks 排序+最长递增