12/1/2018 CÂY CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Data Structures & Algorithms CÂY - TREE CÂY CÂY CÂY – Khái Niệm CÂY – Một số khái Niệm Cây tập hợp T phần tử (gọi nút cây), có nút đặc biệt gọi nút gốc, nút lại chia thành tập rời T1, T2, …,Tn theo quan hệ phân cấp, Ti Bậc – Degree/Oder Bậc nút: số nút Mỗi nút cấp i quản lý số nút cấp i+1 Quan hệ người ta gọi quan hệ cha – 2 1 0 Bậc cây: bậc lớn nút Cây có bậc n gọi n-phân 12/1/2018 CÂY – Một số khái Niệm CÂY – Một số khái Niệm Mức nút (level): Mức (gốc (T) ) = Gọi T1, T2, T3, , Tn T0 : Mức (T1) = Mức (T2) = = Mức (Tn) = Mức (T0) + Nút gốc (root): nút khơng có nút cha ROOT Mức 2 Mức 1 0 Leaf Mức Leaf Mức x Độ sâu nút (dept): Độ dài đường node gốc node Node mức i có độ dài i Nút lá(leaf): nút có bậc Nút nhánh (branch/internal): nút có bậc khác khơng phải gốc CÂY – Một số khái Niệm Cây Nhị Phân (Binary Tree) Chiều cao (height): Cây rỗng = Cây khác rỗng: Mức lớn node • Mỗi nút có tối đa Cây trái Cây phải h Mức x Tính chất Binary Tree 10 Một số ứng dụng Binary Tree • Cây tổ chức thi đấu • Số nút nằm mức i 2i • Cây biểu thức số học • Số nút 2h-1, với h chiều • Lưu trữ tìm kiếm thơng tin cao • Chiều cao h log2(N) • N = số nút • Số nút 2h-1 11 12 12/1/2018 Tổ chức Binary Tree Tổ chức trớ Binary Tree TNODE 1f 2f Left TNODE Right TNODE 2f 4 Left TNODE N TNODE 3f Right 3f 7f 5f TNODE Left Right TNODE Right TNODE 5f N Left TNODE N N 7f TNODE N N 13 Cấu trúc liệu Binary Tree 14 Duyệt Cây Nhị Phân • Đảm bảo đến node xác lần struct node { KDL Key; struct node *pLeft; struct node *pRight; }; typedef struct node TNode; cách có hệ thống Key • Nhiều thao tác xử lý cần phải sử dụng đến phép duyệt pLeft pRight • Các phép dựa trình tự thăm gốc • Duyệt trước (pre-oder) typedef TNode* TREE; • Duyệt (in-oder) • Duyệt sau (post-oder) 15 Duyệt Cây Nhị Phân Duyệt Cây Nhị Phân NODE • Duyệt trước (pre-oder) – In thông tin node gốc trước Left 16 Right • Duyệt trước (pre-oder) – In thơng tin node gốc trước • NLR: 9 void NLR(TREE Root) { if (Root != NULL) { ; //Xử lý tương ứng theo nhu cầu NLR(Root->pLeft); NLR (Root->pRight); } } • NRL: 4 17 18 12/1/2018 Duyệt Cây Nhị Phân Duyệt Cây Nhị Phân NODE • Duyệt giữa(in-oder) – In thơng tin node gốc thứ Left void LNR(TREE Root) { if (Root != NULL) { LNR(Root->pLeft); Right ; //Xử lý tương ứng theo nhu cầu • Duyệt giữa(in-oder) – In thông tin node gốc thứ • LNR: 9 } } LNR (Root->pRight); • RNL: 64 19 20 Duyệt Cây Nhị Phân Duyệt Cây Nhị Phân NODE • Duyệt sau(post-oder) – In thông tin node gốc cuối Left void LRN (TREE Root) { if (Root != NULL) { LRN (Root->pLeft); LRN (Root->pRight); Right • Duyệt sau(post-oder) – In thông tin node gốc sau ; //Xử lý tương ứng theo nhu cầu • LRN: 4 6 } } • RLN: 46 21 22 Duyệt Cây Nhị Phân – Ví Dụ Duyệt Cây Nhị Phân – Ví Dụ 9 8 10 10 12 12 • NLR: 9, 2, 6, 1, 10, 8, 5, 3, 7, 12, Cho biết kết phép duyệt theo thứ tự sau • LNR : 6, 2, 10, 1, 9, 3, 5, 8, 12, 7, NLR, NLR, LNR, RNL, LRN, RLN 23 24 12/1/2018 Duyệt Cây Nhị Phân – Ví Dụ Duyệt Cây Nhị Phân – Ví Dụ NLR: LNR: 25 26 Duyệt Cây Nhị Phân – Ví Dụ Đếm số node • Nếu Tree rỗng, numberNode (Tree) =0 • Ngược lại, numberNode(Tree) = 1+ numberNode(cây trái) + numberNode(cây phải) 36 15 40 23 LRN: 27 28 Đếm số node Tính chiều cao • Nếu Tree rỗng, numberLeafNode (Tree) =0 • Nếu Tree rỗng, height (Tree) =0 • Nếu Tree nút lá, numberLeafNode (Tree) += • Ngược lại, height (Tree) = + max(height (cây trái) ,height (cây phải)) • Nếu Tree khơng nút lá, numberLeafNode (Tree) = numberLeafNode (cây trái) + numberLeafNode (cây phải) 7 3 36 15 40 23 36 29 15 40 23 30 12/1/2018 Slide tham khảo từ • Slide tham khảo từ: • Slide CTDL GT, Khoa Khoa Học Máy Tính, ĐHCNTT • Congdongcviet.com • Cplusplus.com 31 32 ... numberLeafNode (Tree) =0 • Nếu Tree rỗng, height (Tree) =0 • Nếu Tree nút lá, numberLeafNode (Tree) += • Ngược lại, height (Tree) = + max(height (cây trái) ,height (cây phải)) • Nếu Tree khơng nút... số node • Nếu Tree rỗng, numberNode (Tree) =0 • Ngược lại, numberNode (Tree) = 1+ numberNode(cây trái) + numberNode(cây phải) 36 15 40 23 LRN: 27 28 Đếm số node Tính chiều cao • Nếu Tree rỗng, numberLeafNode... Nhị Phân (Binary Tree) Chiều cao (height): Cây rỗng = Cây khác rỗng: Mức lớn node • Mỗi nút có tối đa Cây trái Cây phải h Mức x Tính chất Binary Tree 10 Một số ứng dụng Binary Tree • Cây tổ chức