Nguyễn Tấn Trần Minh Khang Cho cây nhị phân các số nguyên.. Hãy viết hàm kiểm tra cây nhị phân T có phải là “cây nhị phân cân bằng” hay không... Cây nhị phân cânbằng là cây nhị phân
Trang 1BÀI 895
Trang 2Cây nhị phân - 2
ThS Nguyễn Tấn
Trần Minh Khang
Cho cây nhị phân các số nguyên Hãy viết hàm kiểm tra cây nhị phân T có phải là “cây nhị phân cân bằng” hay không.
Trang 3 Cây nhị phân cân
bằng là cây nhị phân
kiện sau: Mọi node trong cây đều có độ lệch nhỏ hơn bằng 1.
Trang 4Cây nhị phân - 4
ThS Nguyễn Tấn
Trần Minh Khang
1. struct node
2. {
4. struct node *pLeft;
5. struct node *pRight;
6. };
7. typedef struct node NODE;
8. typedef NODE *TREE;
Trang 511.NODE* LonNhat(TREE t)
12.{
13. if(!t)
15. NODE*a=LonNhat(t->pLeft);
16. NODE*b=LonNhat(t->pRight);
17. NODE*lc = t;
18. if(a && a->info>lc->info)
20. if(b && b->info>lc->info)
Trang 6Cây nhị phân - 6
ThS Nguyễn Tấn
Trần Minh Khang
11.NODE* NhoNhat(TREE t)
12.{
13. if(!t)
15. NODE*a=NhoNhat(t->pLeft);
16. NODE*b=NhoNhat(t->pRight);
17. NODE*lc = t;
18. if(a && a->info<lc->info)
20. if(b && b->info<lc->info)
22. return lc;
23.}
Trang 713. if(!t)
15. if(ktTimKiem(t->pLeft)==0)
17. if(ktTimKiem(t->pRight)==0)
19. NODE*a=LonNhat(t->pLeft);
20. if(a && a->info>t->info)
22. NODE*b=NhoNhat(t->pRight);
if(b && b->info<t->info)
Trang 8Cây nhị phân - 8
ThS Nguyễn Tấn
Trần Minh Khang
11.int ChieuCao(TREE t)
12.{
13. if(!t)
15. int a=ChieuCao(t->pLeft);
16. int b=ChieuCao(t->pRight);
17. if(a>b)
19. return (b+1);
20.}
Trang 911.int DoLechMax(TREE t)
12.{
13. if(!t)
15. int a=DoLechMax(t->pLeft);
16. int b=DoLechMax(t->pRight);
17. int hl=ChieuCao(t->pLeft);
18. int hr=ChieuCao(t->pRight);
19. int lc = abs(hl-hr);
20. if(a>lc)
Trang 10Cây nhị phân - 10
ThS Nguyễn Tấn
Trần Minh Khang
12.{
13. if(!t)
15. if(ktTimKiem(t)==0)
17. if(DoLechMax(t)>1)
19. return 1;
20.}