[ツリー] バイナリ·ツリーの学生 – 学生バイナリ·ツリー
コードは、次のコードを開発した 二分探索木上のいくつかの操作 建設二分探索木の学生を解決するために (キーは、学生のコードです). 各学生の学生コード, 名前, ポイント. 学生のリストを見る, より多くの学生, 未満の生徒の得点を削除 4
コードは以下の通りですから延び 二分探索木上のいくつかの操作 学生バイナリツリーを作成する (キーは、学生のIDです). 学生は、IDを持ってい, 名前とスコア. ツリートラバース, 小さいスコアを持つ学生を追加し、すべての学生を削除 4
#include <stdlib.h> #include <stdio.h> #include <string.h> struct item { char id[20]; char name[20]; double scores; }; struct Node { item key; //truong key cua du lieu Node *Left, *Right; //con trai va con phai }; typedef Node *Tree; //cay int compare(item x, item y) { // so sanh 2 item theo key return strcmp(x.id, y.id); } item inputItem() { // nhap 1 item item x; char id[20]; printf("Enter id of student (q to quit): "); gets(x.id); if (strcmp(x.id, "q") == 0 || strcmp(x.id, "Q") == 0) { return x; } printf("Enter name of student: "); gets(x.name); printf("Enter scores of student:"); scanf("%lf", &x.scores); //fflush(stdin); while (getchar() != '\n'); return x; } void outItem(item x) { printf("%-20s %-20s %-3.2f \n", x.id, x.name, x.scores); } int insertNode(Tree &T, item x) // chen 1 Node vao cay { if (T != NULL) { if (compare(T->key, x) == 0) return -1; // Node nay da co if (compare(T->key, x) > 0) return insertNode(T->Left, x); // chen vao Node trai else if (compare(T->key, x) < 0) return insertNode(T->Right, x); // chen vao Node phai } T = (Node *) malloc(sizeof(Node)); if (T == NULL) return 0; // khong du bo nho T->key = x; T->Left = T->Right = NULL; return 1; // ok } void CreateTree(Tree &T) // nhap cay { item x; while (1) { printf("Enter a student: "); x = inputItem(); if (strcmp(x.id, "q") == 0 || strcmp(x.id, "Q") == 0) break; // x = 0 thi thoat int check = insertNode(T, x); if (check == -1) printf("Student is exits!"); else if (check == 0) printf("Memory full"); } } // Duyet theo LNR void LNR(Tree T) { if (T != NULL) { LNR(T->Left); outItem(T->key); LNR(T->Right); } } Node* searchScores(Tree T, int scores) // tim nut co diem < 4 { if (T != NULL) { if (T->key.scores < scores) { Node *P = T; return P; } if (T->key.scores >= scores) { Node *node = searchScores(T->Left, scores); if (node != NULL) return node; else { return searchScores(T->Right, scores); } } } return NULL; } int delKey(Tree &T, item x) // xoa nut co key x { if (T == NULL) return 0; else if (compare(T->key, x) > 0) return delKey(T->Left, x); else if (compare(T->key, x) < 0) return delKey(T->Right, x); else // T->key == x { Node *P = T; if (T->Left == NULL) T = T->Right; // Node chi co cay con phai else if (T->Right == NULL) T = T->Left; // Node chi co cay con trai else // Node co ca 2 con { Node *S = T, *Q = S->Left; // S la cha cua Q, Q la Node phai nhat cua cay con trai cua P while (Q->Right != NULL) { S = Q; Q = Q->Right; } P->key = Q->key; S->Right = Q->Left; delete Q; } } return 1; } int main() { Tree T; T = NULL; //Tao cay rong CreateTree(T); //Nhap cay //duyet cay printf("LNR: \n"); LNR(T); printf("\n"); // them sinh vien item x; printf("Enter id of student to add: "); x = inputItem(); if (insertNode(T, x) == -1) { printf("add failt!"); } else { printf("add success:\n"); printf("LNR after add item: \n"); LNR(T); printf("\n"); } // xoa sinh vien co diem nho hon 4 int del = 1; while (del) { Node* node = searchScores(T, 4); if (node != NULL) { printf("del"); del = delKey(T, node->key); } else { printf("null"); del = 0; } } printf("LNR after delete item: \n"); LNR(T); printf("\n"); return 0; }
最近のコメント