Mã: #include<stdio.h> #include<conio.h> typedef struct node { int a; struct node *left,*right; }cay; void duyetgiua(cay *root) { if(root!=NULL) { duyetgiua(root->left); printf("%3d",root->a); duyetgiua(root->right); } } void duyetsau(cay *root) { if(root!=NULL) { duyetsau(root->left); duyetsau(root->right); printf("%3d",root->a); } } void main() { clrscr(); cay *root,*temp,*temp1,*temp2; int k,n,x; root=NULL; ///////////////////// //Them 1 nut// ///////////////////// printf("\nTien hanh nhap du lieu cho cay:"); do { printf("\nNhap X (Nhap -1 de ket thuc):"); scanf("%d",&x); if(x==-1) break; temp=root; k=0; while(temp!=NULL) { if(x<temp->a) temp=temp->left; else if(x>temp->a) temp=temp->right; else { k=1; break; } } if(k==1) { printf("\nTrung khoa va nhap lai!!!\n"); continue; } if(root==NULL) { root=new cay; temp=root; } else { temp1=root; k=1; while(temp1!=NULL) { temp=temp1; if(x<temp1->a) temp1=temp1->left; else if(x>temp1->a) temp1=temp1->right; } if(x<temp->a) { temp->left=new cay; temp=temp->left; } else { temp->right=new cay; temp=temp->right; } } temp->a=x; temp->left=temp->right=NULL; } while(1); printf("\nDuyet giua:\n"); duyetgiua(root); printf("\nDuyet sau:\n"); duyetsau(root); /////////////////////////// //Tim kiem 1 nut// ////////////////////////// printf("\nNhap gia tri can tim kiem:"); scanf("%d",&x); temp=root; while(temp!=NULL) { if(x<temp->a) temp=temp->left; else if(x>temp->a) temp=temp->right; else break; } if(temp==NULL) printf("\nTim khong ra!!!"); else printf("\nTim thay!!!"); printf("\nTac vu tim kiem da xong."); ////////////////////////////////// //Xoa 1 nut trong cay// ////////////////////////////////// printf("\nNhap gia tri can xoa:"); scanf("%d",&x); temp=root; while(temp!=NULL) { if(temp->a==x) break; temp1=temp; if(x<temp->a) temp=temp->left; else if(x>temp->a) temp=temp->right; } printf("\nNut can xoa la: %d, nut cha la %d\n",temp->a,temp1->a); if(temp==NULL) printf("\nTim khong thay!!!"); else if(temp->left==NULL&&temp->right==NULL) if(temp->a<temp1->a) temp1->left=NULL; else temp1->right=NULL; else if(temp->left==NULL) { temp1->right=temp->right; delete(temp); } else if(temp->right==NULL) { temp1->left=temp->left; delete(temp); } else if(temp->right!=NULL&&temp->left!=NULL) { temp1=temp->left; if(temp1->right==NULL) { temp->a=temp1->a; temp->left=temp1->left; delete(temp1); } else { while(temp1->right!=NULL) { temp2=temp1; temp1=temp1->right; } temp->a=temp1->a; temp2->right=NULL; delete(temp1); } } duyetsau(root); getch(); } Vì trong lúc làm có phát sinh nhiều điều kiện nên mình đặt nhiều biến để tiện dùng, nếu có thừa biến nào thì mấy bạn thông cảm nha :y118: