1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu trúc dữ liệu và giải thuật, cây nhị phân

27 499 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 173,76 KB

Nội dung

Cấu trúc dữ liệu và giải thuật, cây nhị phân

CÂY NHỊ PHÂN NHÓM NỘI DUNG • Khái niệm • Đặc điểm • Kiểu liệu • Cấu trúc chương trình • Các thao tác CÂY • Là tập hợp hữu hạn nút, có nút đặc biệt gốc • Giữa nút có quan hệ phân cấp “cha-con” KHÁI NIỆM 2 1 • Bậc nút: số nút • Nút gốc: nút nút cha • Nút lá: nút có bậc 0 • Nút nhánh: nút có bậc khác gốc KHÁI NIỆM Mức Mức Mức Mức • Mức cây: người ta quy ước nút gốc có mức 1, nút cha có mức i nút có mức i+1 • Độ cao cây:là mức cao nút CÂY NHỊ PHÂN • Mọi nút nhị phân có tối đa hai • Đối với nút người ta phân biệt trái phải CÂY NHỊ PHÂN TÌM KIẾM • Là nhị phân • Giá trị node lớn giá trị tất node bên trái nhỏ giá trị tất node bên phải 36 15 48 Nút có giá trị nhỏ nằm trái Nút có giá trị lớn nằm phải KIỂU DỮ LIỆU Nút Giá trị Trỏ trái TNODE Trỏ phải typedef struct TNode { Key; struct TNode *pLeft, *pRight; } *TREE; pLeft Key pRight Ví dụ typedef struct TNode { int Key; struct TNode *pLeft, *pRight; } *TREE; CẤU TRÚC CHƯƠNG TRÌNH begin Khai báo cấu trúc Khởi tạo rỗng Xây dựng Các thao tác Hủy end HÀM TẠO CÂY int ThemNut (TREE & t, int x) { if(t!=NULL) { if(x==t->Key) return 0; else { if(xKey) ThemNut(t->pLeft, x); else ThemNut(t->pRight, x); } } else { t=new TNODE; if(t==NULL) return -1; t->Key=x; t->pLeft=t->pRight=NULL; return 1; } } CÁC THAO TÁC Tạo Duyệt Cho biết thông tin Tìm kiếm Xoá node DUYỆT CÂY Thứ tự trước (NLR) Thứ tự (LNR) Thứ tự sau (LRN) DUYÊT TRƯỚC (NLR) Tại node t xét, khác rỗng • In giá trị t • Duyệt bên trái t theo thứ tự NLR • Duyệt bên phải t theo thứ tự NLR void NLR (TREE t) { if(t!=NULL) { frintf(“%d”, T->key); NLR(t->pLeft); NLR(t->pRight); } } MINH HỌA 36 15 40 23 Kết 7, 3, 1, 6, 4, 36, 15, 23, 40 DUYỆT GIỮA (LNR) Tại node t xét, khác rỗng void LNR (TREE t) • Duyệt bên trái t theo thứ tự LNR if(t!=NULL) { { LNR(t->pLeft); • In giá trị t printf(“%d,T->key”); • Duyệt bên phải t theo thứ tự LNR LNR(t->pRight); } } MINH HỌA 36 15 40 23 Kết 1, 3, 4, 6, 7, 15, 23, 36, 40 DUYỆT SAU (LRN) Tại node t xét, khác rỗng void LRN (TREE t) { if(t!=NULL) • Duyệt bên trái t theo thứ tự LRN { LRN(t->pLeft); • Duyệt bên phải t theo thứ tự LRN LRN(t->pRight); cout[...]... t->Key=x; t->pLeft=t->pRight=NULL; return 1; } } CÁC THAO TÁC 1 Tạo cây 2 Duyệt cây 3 Cho biết các thông tin của cây 4 Tìm kiếm 5 Xoá node trên cây DUYỆT CÂY Thứ tự trước (NLR) Thứ tự giữa (LNR) Thứ tự sau (LRN) DUYÊT TRƯỚC (NLR) Tại node t đang xét, nếu khác rỗng thì • In giá trị của t • Duyệt cây con bên trái của t theo thứ tự NLR • Duyệt cây con bên phải của t theo thứ tự NLR void NLR (TREE t) { if(t!=NULL)... tự LRN { LRN(t->pLeft); • Duyệt cây con bên phải của t theo thứ tự LRN LRN(t->pRight); coutkey”); • Duyệt cây con bên phải của t theo thứ tự LNR LNR(t->pRight); } } MINH HỌA 7 3 36 1 6 4 15 40 23 Kết quả 1, 3, 4, 6, 7, 15, 23, 36, 40 DUYỆT SAU (LRN) Tại node t đang xét, nếu khác rỗng thì void LRN (TREE t) { if(t!=NULL) • Duyệt cây con bên trái của t theo thứ ... Mức cây: người ta quy ước nút gốc có mức 1, nút cha có mức i nút có mức i+1 • Độ cao cây: là mức cao nút CÂY NHỊ PHÂN • Mọi nút nhị phân có tối đa hai • Đối với nút người ta phân biệt trái phải CÂY... CÂY NHỊ PHÂN TÌM KIẾM • Là nhị phân • Giá trị node lớn giá trị tất node bên trái nhỏ giá trị tất node bên phải 36 15 48 Nút có giá trị nhỏ nằm trái Nút có giá trị lớn nằm phải KIỂU DỮ LIỆU...NỘI DUNG • Khái niệm • Đặc điểm • Kiểu liệu • Cấu trúc chương trình • Các thao tác CÂY • Là tập hợp hữu hạn nút, có nút đặc biệt gốc • Giữa nút có quan hệ phân cấp “cha-con” KHÁI NIỆM 2 1 • Bậc

Ngày đăng: 24/02/2016, 16:39

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w