二叉排序树创建(数组)

#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;//建立根节点
  for(i=1;i<n;i++){
      p=(BTnode*)malloc(sizeof(BTnode));
      p->data=a[i];
      p->left=p->right=NULL;
      c=root;              //根节点给C指针
	while(c){                //判断p结点时属于左子树还是右子树
	  pa=c;                //pa指针是p结点的父节点
	  if(c->data>p->data)
	     c=c->left;
	  else   //如果结点值右重复,则后面结点在右孩子上
	     c=c->right;
	}
	if(pa->data>p->data)  //p结点时父节点的左孩子还是右孩子
	   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("请输入数组a[]=");
 for(i=0;i<n;i++)
   scanf("%d",&a[i]);
root=CreateTree(a,n); 
Forder(root);
Inorder(root);
Porder(root);
}

本文题目:二叉排序树创建(数组)
网页网址:https://www.cdcxhl.com/article46/ppdphg.html

成都网站建设公司_创新互联,为您提供网站制作全网营销推广面包屑导航网站设计自适应网站服务器托管

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

绵阳服务器托管