一、二叉树数组存放中序遍历
void ArOrder(ElemType *ar,int i, int n) //数组存放中序遍历
{
if(i < n && ar[i] != END)
{
ArOrder(ar,i*2+1,n);
cout<<ar[i]<<" ";
ArOrder(ar,i*2+2,n);
}
}
void Ar_InOrder(ElemType *ar,int n)
{
if(ar == NULL || n < 1 )
return ;
else
ArOrder(ar,0,n);
cout<<endl;
}
二、数组转为链式存储的二叉树
BtNode * _CreateAr(ElemType *ar,int i,int n) //数组----》链
{
BtNode *s = NULL;
if(i < n && ar[i] != END)
{
s = Buynode();
s->data = ar[i];
s->leftchild = _CreateAr(ar,i*2+1,n);
s->rightchild = _CreateAr(ar,i*2+2,n);
}
return s;
}
BtNode * CreateAr(ElemType *ar,int n)
{
if(ar == NULL || n < 1 )
{
return NULL;
}
else
{
return _CreateAr(ar,0,n);
}
}
三、链到数组
void _CreateArray(ElemType *br,int i,int n,BtNode *ptr)
{
if(ptr != NULL)
{
br[i] = ptr->data;
_CreateArray(br,i*2+1,n,ptr->leftchild);
_CreateArray(br,i*2+2,n,ptr->rightchild);
}
}
void CreateArray(ElemType *br,int n ,BtNode *ptr)
{
if(NULL == br || n < 1 || ptr == NULL) return ;
for(int i = 0;i<n;++i) br[i] = END;
_CreateArray(br,0,n,ptr);
}
四、数组转为平衡二叉树
BtNode * CreateMid(ElemType *ar,int left,int right)
{
BtNode *s = NULL;
if(left <= right) // 0 1
{
int mid = (right - left + 1) / 2 + left;
s = Buynode();
s->data = ar[mid];
s->leftchild = CreateMid(ar,left,mid-1);
s->rightchild = CreateMid(ar,mid+1,right);
}
return s;
}
BtNode * MidCreateAr(ElemType *ar,int n)
{
if(NULL == ar || n < 1)
return NULL;
else
return CreateMid(ar,0,n-1);
}