溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二叉排序樹創(chuàng)建(數(shù)組)

發(fā)布時間:2020-07-04 12:44:30 來源:網(wǎng)絡 閱讀:626 作者:閆寶通 欄目:編程語言
#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結點時屬于左子樹還是右子樹
	  pa=c;                //pa指針是p結點的父節(jié)點
	  if(c->data>p->data)
	     c=c->left;
	  else   //如果結點值右重復,則后面結點在右孩子上
	     c=c->right;
	}
	if(pa->data>p->data)  //p結點時父節(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);
}
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI