#include<stdio.h>
#include<stdlib.h>
/*
遞歸前中后遍歷
*/
typedef struct node
{
int data;
struct node*left;
struct node*right;
}BTnode;
BTnode*CreateTree(int a[],int n)
{
BTnode*root,*c,*p,*pa;
int i;
root=(BTnode*)malloc(sizeof(BTnode));
root->data=a[0];
root->left=root->right=NULL;//建立根節(jié)點
for(i=1;i<n;i++){
p=(BTnode*)malloc(sizeof(BTnode));
p->data=a[i];
p->left=p->right=NULL;
c=root; //根節(jié)點給C指針
while(c){ //判斷p結(jié)點時屬于左子樹還是右子樹
pa=c; //pa指針是p結(jié)點的父節(jié)點
if(c->data>p->data)
c=c->left;
else //如果結(jié)點值右重復(fù),則后面結(jié)點在右孩子上
c=c->right;
}
if(pa->data>p->data) //p結(jié)點時父節(jié)點的左孩子還是右孩子
pa->left=p;
else
pa->right=p;
}
return root;
}
void Forder(BTnode*root){
if(root){
printf("%d",root->data);
printf("\n");
Forder(root->left);
Forder(root->right);
}
}
void Inorder(BTnode*root){
if(root){
Inorder(root->left);
printf("%3d",root->data);
printf("\n");
Inorder(root->right);
}
}
void Porder(BTnode*root){
if(root){
Porder(root->left);
Porder(root->right);
printf("%6d",root->data);
printf("\n");
}
}
int main(void){
BTnode*root;
int *a;
int n;
int i;
printf("請輸入n=");
scanf("%d",&n);
a=(int*)malloc(n*sizeof(int));
printf("請輸入數(shù)組a[]=");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
root=CreateTree(a,n);
Forder(root);
Inorder(root);
Porder(root);
}
本文題目:二叉排序樹創(chuàng)建(數(shù)組)
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article46/ppdphg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、全網(wǎng)營銷推廣、面包屑導(dǎo)航、網(wǎng)站設(shè)計、自適應(yīng)網(wǎng)站、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)