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