intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Thuật toán cây nhị phân

Chia sẻ: Trần Thế Quỳnh | Ngày: | Loại File: PPT | Số trang:18

381
lượt xem
93
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu tham khảo Thuật toán cây nhị phân

Chủ đề:
Lưu

Nội dung Text: Thuật toán cây nhị phân

  1. CÂY NHỊ PHÂN 1 TMT
  2. CÁC KHÁI NIỆM 1. Cấu trúc cây nhị phân 2. Các loại cây nhị phân a/ Cây nhị phân đúng (Strictly Binary Tree):  Tất cả các nút đều có đúng hai con (ngoại  trừ nút lá).   A B C X F D E 2 G H I Y
  3. CÁC KHÁI NIỆM  b/ Cây nhị phân đầy (Complete Binary  Tree): là cây nhị phân đúng và tất cả các  nút lá ở cùng mức.  A B C G E F D IJ MN H L O 3 K
  4. ĐẶC ĐIỂM CÂY NHỊ PHÂN TÌM KIẾM  Là cây nhị phân  Giá  trị  của  một  node  7 bất  kỳ  luôn  lớn  hơn  giá  trị  của  tất  cả  các  3 36 node  bên  trái  và  nhỏ  hơn  giá  trị  tất  cả  các  1 6 15 40 node bên phải Nút  có  giá  trị  nhỏ  4 23 nhất  nằm  ở  trái  nhất  của cây   Nút  có  giá  trị  lớn  4 nhất nằm  ở phải nhất  của cây
  5.  Cây nhị phân cân bằng (AVL): Một cây nhị  phân  được  gọi  là  cây  nhị  phân  cân  bằng  nếu  và  chỉ  nếu  đối  với  mọi  nút  của  cây  thì  chiều  cao  của  cây  con  bên  trái  và  chiều  cao của cây con bên phải hơn kém nhau  nhiều  nhất  là  1  (Theo  Adelson  ­  Velski  và  Landis).  A B C F D E G HI J 5
  6.  Cây  nhị  phân  cân  bằng  hoàn  toàn:  Một  cây  nhị  phân  được  gọi  là  cây  nhị  phân  cân  bằng hoàn toàn nếu và chỉ nếu  đối với mọi  nút  của  cây  thì  số  nút  của  cây  con  bên  trái và số nút của cây con bên phải hơn  kém nhau nhiều nhất là 1  A B C E F E D 6 HI H
  7. ĐỊNH NGHĨA KIỂU DỮ LIỆU Giá trị Key TNODE Nút Trỏ trái Trỏ phải pLeft pRight typedef struct Node {  Key; struct Node *Left, *Right; } *Tree;  7
  8. KHAI BÁO CÂY NHỊ  typedef struct  Node { int Key; struct  Node *Left, *Right; } *Tree; 8
  9. XÂY DỰNG CÂY  Ví dụ: có dãy số 20, 70, 30, 25, 35, 50, 80, 40,  60, 10 (3 trường hợp gốc là 50, gốc là, 10 hay gốc là  80) 9
  10. Ví dụ: có dãy số 20, 70, 30, 25, 35, 50, 80, 40,  60, 10 10
  11. Ví dụ: có dãy số 20, 70, 30, 25, 35, 50, 80, 40,  60, 10 11
  12. DUYỆT CÂY Thứ tự trước  (NLR) Thứ tự giữa  (LNR) Thứ tự sau  (LRN) …… 12
  13. NLR 7 3 36 1 6 15 40 4 23 7     L7        R7 7    3           36   L3   R3      L36   R36 7      3     1     6  L6        36   15  R15    40 7      3     1     6   4         36   15  23      40 13
  14. NLR void NLR (TREE t) Tại node t  đang xét, nếu  { khác rỗng thì if(t!=NULL) . In giá trị của t { .  Duyệt  cây  con  bên  trái  cout
  15. LNR 7 3 36 1 6 15 40 4 23                 L7       7  R7        L3   3      R3              7      L36   36        R36 1     3     L6    6                7      15  R15   36      40 15 1     3       4    6                7      15   23    36     40
  16. LNR void LNR (TREE t) Tại node t đang xét, nếu  { khác rỗng thì if(t!=NULL) . Duyệt cây con bên trái  { của t theo thứ tự LNR LNR(t­>pLeft); . In giá trị của t cout
  17. LRN 7 3 36 1 6 15 40 4 23                 L7      R7 7        L3   R3    3                L36   R36       36         7 1     L6    6     3                R15    15   40   36         7 17 1     4      6     3                23      15   40   36         7
  18. LRN void LRN (TREE t) { Tại node t đang xét, nếu  if(t!=NULL) khác rỗng thì { . Duyệt cây con bên trái  LRN(t­>pLeft); của t theo thứ tự LRN LRN(t­>pRight); . Duyệt cây con bên phải  cout
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2