Khoa CNTT CTDL BÀI 895 ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - Khoa CNTT CTDL BÀI 895 nhị phân số nguyên Hãy viết hàm kiểm tra nhị phân T có phải “cây nhị phân cân bằng” hay không Cho ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - Khoa CNTT CTDL BÀI 895 Cây nhị phân cân nhị phân tìm kiếm thoả điều kiện sau: Mọi node có độ lệch nhỏ ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - Click to see Figure 1-2 Khoa CNTT CTDL BÀI 895 Cấu trúc liệu struct node { int info; struct node *pLeft; struct node *pRight; }; typedef struct node NODE; typedef NODE *TREE; ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - Khoa CNTT CTDL BÀI 895 Định nghĩa hàm 11 NODE* LonNhat(TREE t) 12.{ if(!t) return NULL; NODE*a=LonNhat(t->pLeft); NODE*b=LonNhat(t->pRight); NODE*lc = t; if(a && a->info>lc->info) lc = a; if(b && b->info>lc->info) lc = b; return lc; 13 14 15 16 17 18 19 20 21 22 23.} ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - Khoa CNTT CTDL BÀI 895 Định nghĩa hàm 11 NODE* NhoNhat(TREE t) 12.{ if(!t) return NULL; NODE*a=NhoNhat(t->pLeft); NODE*b=NhoNhat(t->pRight); NODE*lc = t; if(a && a->infoinfo) lc = a; if(b && b->infoinfo) lc = b; return lc; 13 14 15 16 17 18 19 20 21 22 23.} ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - Khoa CNTT CTDL BÀI 895 11 int ktTimKiem(TREE t) 12.{ if(!t) return 1; if(ktTimKiem(t->pLeft)==0) return 0; if(ktTimKiem(t->pRight)==0) return 0; NODE*a=LonNhat(t->pLeft); if(a && a->info>t->info) return 0; NODE*b=NhoNhat(t->pRight); if(b && b->infoinfo) return 0; return 1; 13 14 15 16 17 18 19 20 21 22 23 24 25 26.} ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - Khoa CNTT CTDL BÀI 895 Định nghĩa hàm 11 int ChieuCao(TREE t) 12.{ if(!t) return 0; int a=ChieuCao(t->pLeft); int b=ChieuCao(t->pRight); if(a>b) return (a+1); return (b+1); 13 14 15 16 17 18 19 20.} ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - Khoa CNTT CTDL BÀI 895 Định nghĩa hàm 11 int DoLechMax(TREE t) 12.{ if(!t) return 0; int a=DoLechMax(t->pLeft); int b=DoLechMax(t->pRight); int hl=ChieuCao(t->pLeft); int hr=ChieuCao(t->pRight); int lc = abs(hl-hr); if(a>lc) lc = a; if(b>lc) lc = b; return lc; 13 14 15 16 17 18 19 20 21 22 23 24 25.} ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - Khoa CNTT CTDL BÀI 895 11 int ktCanBang(TREE t) 12.{ if(!t) return 1; if(ktTimKiem(t)==0) return 0; if(DoLechMax(t)>1) return 0; return 1; 13 14 15 16 17 18 19 20.} ThS Nguyễn Tấn Trần Minh Khang Cây nhị phân - 10