我们用递归方法遍历有序数组来建立二叉查找树,每次都把[left, right]中间的数看成根节点建树
由于二叉查找树的中序遍历是有序的,所以我们用中序遍历二叉查找树时,可以获得数组是有序的,那么确定
数组是有序的。
#include <iostream>
using namespace std;
int arr[] = {1, 2, 3, 4, 5, 6};
typedef struct Node_
{
int data;
Node_ *left, * right;
}Node;
//将有序数组arr转换为二叉排序树
void Convert(Node * & root, int arr[], int left, int right)
{
if (left > right)
{
root = 0;
return;
}
int mid = left + (right - left) / 2;
root = new Node();
root->data = arr[mid];
Convert(root->left, arr, left, mid - 1);
Convert(root->right, arr, mid + 1, right);
}
//前序遍历输出
void preOrder(Node * root)
{
if(!root)
{
return;
}
printf("%d ", root->data);
preOrder(root->left);
preOrder(root->right);
}
int main()
{
int n = sizeof(arr) / sizeof(arr[0]);
Node * root = 0;
Convert(root, arr, 0, n - 1);
preOrder(root);
return 0;
}