
// [-10,-3,0,5,9]
/* 0
/ \
-3 9
/ /
-10 5
*/
#include <stdio.h>
#include <iostream>
using namespace std;
typedef struct BiTNode
{
int val;
BiTNode *left,*right;
}BiTNode,*BiTree;
BiTNode *CreateBitree(int num[],int numsize)
{
if(numsize==0)
{
return NULL;
}
int t;
t=numsize/2;
BiTNode *T;
T=new BiTNode;
T->val=num[t];
T->left=NULL;
T->right=NULL;
if(numsize%2==1)//如果是奇数个数,中间位置两侧数字个数相同
{
T->left=CreateBitree(num,numsize/2);
T->right=CreateBitree(num+t+1,numsize/2);
}
if(numsize%2==0)//如果是奇数个数
{
T->left=CreateBitree(num,numsize/2);
T->right=CreateBitree(num+t+1,numsize/2-1);//如果是奇数个数,中间位置后面的数字个数比前一部分少一个。
//nums+t+1,就是把中间位置后面的元素切分出来
}
return T;
}
void PreTraverse(BiTree T)
{
if(T)
{
cout<<T->val<<" ";
PreTraverse(T->left);
PreTraverse(T->right);
}
}
int main()
{
int A[10000];
BiTree T;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>A[i];
}
T=CreateBitree(A,n);
PreTraverse(T);
}
运行结果:

本文详细介绍了一种从有序数组构建平衡二叉搜索树的方法,通过递归算法将数组分割并构建树结构,实现了树的前序遍历,并展示了完整的C++实现过程。
5166

被折叠的 条评论
为什么被折叠?



