CÂY TRONG CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

ĐỊNHNGHĨA

Cấu trúc tài liệu trừu tượng ta quyên tâm cho tới vào mục này là cấu trúc cây. Cây là 1 trong những kết cấu tài liệu tất cả một tập hữu hạn các nút, thân các nút bao gồm một quan hệ tình dục phân cung cấp Gọi là quan hệ giới tính "cha - con". Có một nút đặc biệt call là cội (root).

Bạn đang xem: Cây trong cấu trúc dữ liệu và giải thuật

Có thể có mang cây bằng các đệ quy như sau:

Mỗi nút là một trong cây, nút ít đó cũng là cội của cây ấy

Nếu n là 1 trong những nút ít với n1, n2, …, nk thứu tự là gốc của các cây T1, T2, …, Tk; các cây này đôi một không tồn tại nút ít tầm thường. Thì ví như đến nút ít n biến đổi phụ thân của những nút n1, n2, …, nk ta sẽ tiến hành một cây bắt đầu T. Cây này còn có nút n là gốc còn những cây T1, T2, …, Tk trở nên các cây con (subtree) của cội.

Để tiện, fan ta còn có thể chấp nhận được vĩnh cửu một cây không tồn tại nút ít làm sao cơ mà ta Call là cây trống rỗng (null tree).

Xét cây vào Hình 1:

*
Hình 1:Cây (Tree)

A là thân phụ của B, C, D, còn G, H, I là con của D.

Số những bé của một nút được điện thoại tư vấn là cấp của nút ít kia, ví dụ cấp cho của A là 3, cấp của B là 2, cấp của C là 0.

Nút ít gồm cung cấp bằng 0 được gọi là nút lá (leaf) tuyệt nút ít tận thuộc. lấy ví dụ nlỗi ở bên trên, các nút ít E, F, C, G, J, K với I là những nút là. Những nút ít chưa hẳn là lá được hotline là nút nhánh (branch).

Cấp tối đa của một nút trên cây Call là cung cấp của cây đó, cây sinh hoạt hình bên trên là cây cung cấp 3.

Gốc của cây fan ta gán mang đến số mức là 1 trong những, giả dụ nút ít cha bao gồm nút là i thì nút con sẽ sở hữu mức là i +1. Mức của cây vào Hình 1 được chỉ ra rằng trong Hình 12:


*
Hình 2:Mức của những nút ít trên cây

Chiều cao (height) tốt chiều sâu (depth) của một cây là số nấc lớn số 1 của nút ít tất cả trên câyđó. Cây ở trên tất cả chiều cao là 4.

Một tập hợp những cây minh bạch được Hotline là rừng (forest), một cây cũng là một trong rừng. Nếu bỏ nút cội bên trên cây thì sẽ tạo thành một rừng những cây con.

Ví dụ:

Mục lục của một cuốn nắn sách cùng với phần, chương thơm, bài xích, mục v.v… gồm kết cấu của cây

Cấu trúc thỏng mục bên trên đĩa cũng có thể có kết cấu cây, thư mục cội có thể coi là nơi bắt đầu của cây

đó cùng với những cây bé là các thư mục bé và tệp vị trí tlỗi mục nơi bắt đầu.

Gia phả của một họ tộc cũng có thể có cấu trúc cây.

Một biểu thức số học bao gồm những phnghiền tân oán cộng, trừ, nhân, phân chia cũng có thể tàng trữ vào một cây cơ mà các tân oán hạng được lưu trữ ở những nút ít lá, những tân oán tử được tàng trữ sinh hoạt các nút ít nhánh, từng nhánh là một trong biểu thức nhỏ.

*

Hình 3:Cây trình diễn biểu thức

CÂY NHỊ PHÂN (BINARY TREE)

Cây nhị phân là một trong những dạng đặc trưng của kết cấu cây. Nó tất cả điểm sáng là phần đông nút ít bên trên cây chỉ gồm tối nhiều nhị nhánh bé. Với một nút ít thì bạn ta cũng sáng tỏ cây bé trái cùng cây bé đề nghị của nút ít kia. Cây nhị phân là cây có tính cho sản phẩm từ bỏ của những nhánh nhỏ.

Cần để ý tới một trong những dạng quan trọng của cây nhị phân.


Các cây nhị phân trong Hình 4được Gọi là cây nhị phân suy đổi thay (degenerate binary tree), các nút không phải là lá chỉ bao gồm một nhánh nhỏ. Cây a) được hotline là cây lệch đề nghị, cây b) được Call là cây lệch trái, cây c) và d) được gọi là cây zíc-zắc.


*

Hình 4:Các dạng cây nhị phân suy biến

Các cây vào Hình 5 được gọi là cây nhị phân hoàn chỉnh (complete binary tree): Nếu độ cao của cây là h thì đều nút ít tất cả nút i-1, buổi tối tphát âm là một (i ≥1).

Số lượng tối đa những nút bên trên một cây nhị phân bao gồm độ cao h là 2h-1, buổi tối tphát âm là h (h ≥1). Cây nhị phân hoàn chỉnh, không không thiếu, tất cả n nút ít thì độ cao của nó là h = + 1.


Cây nhị phân khá đầy đủ gồm n nút thì chiều cao của nó là h = log2(n + 1).

BIỂU DIỄN CÂY NHỊ PHÂN


Biểu diễn bằng mảng

Nếu có một cây nhị phân tương đối đầy đủ, ta hoàn toàn có thể tiện lợi đánh số cho những nút trên cây kia theo trang bị tự lần lượt từ bỏ mức 1 trsinh hoạt đi, hết mức này tới cả không giống cùng từ bỏ trái sang trọng bắt buộc đối với những nút sinh hoạt mỗi mức.

*

Hình 6:Đánh số các nút của cây nhị phân vừa đủ để biểu diễn bằng mảng

Với bí quyết khắc số này, bé của nút đồ vật i sẽ là các nút ít máy 2i với 2i + 1. Cha của nút trang bị j là nút ít j div 2. Từ kia hoàn toàn có thể tàng trữ cây bởi một mảng T, nút ít máy i của cây được tàng trữ bằng phần tử T.

Với cây nhị phân đầy đủ ở Hình 6 thì lúc tàng trữ bằng mảng, ta sẽ được mảng như sau:

*

Trong trường thích hợp cây nhị phân không không thiếu, ta hoàn toàn có thể phân phối một trong những nút giả sẽ được cây nhị phân không thiếu thốn, cùng gán phần đa quý hiếm quan trọng mang đến mọi bộ phận trong mảng T tương ứng cùng với hồ hết nút ít này. Hoặc cần sử dụng thêm một mảng prúc để đánh dấu đều nút ít làm sao là nút ít trả từ ta phân phối. Chính vì nguyên nhân này bắt buộc với cây nhị phân ko vừa đủ, ta sẽ gặp phải sự lãng phí bộ nhớ vị có thể đang cần thêm rất nhiều nút ít trả vào thì mới được cây nhị phân đầy đủ.

lấy ví dụ như với cây lệch trái, ta yêu cầu cần sử dụng một mảng 31 phần tử để giữ cây nhị phân chỉ bao gồm 5 nút ít.


*

Hình 7:Nhược điểm của phương pháp màn trình diễn cây bằng mảng


Biểu diễn bởi cấu trúc liên kết

Lúc biểu diễn cây nhị phân bằng kết cấu link, từng nút ít của cây là 1 bạn dạng ghi (record) gồm 3 trường:

Trường Info: Chứa quý giá giữ tại nút ít đó.

Trường Left: Chứa links (con trỏ) cho tới nút nhỏ trái, Có nghĩa là đựng một thông báo đầy đủ để tìm hiểu nút ít bé trái của nút ít sẽ là nút ít nào, vào ngôi trường phù hợp không có nút ít con trái, ngôi trường này được gán một quý hiếm đặc biệt quan trọng.

Xem thêm: Xem Phim Học Viện Ma Cà Rồng Phần 2, Học Viện Ma Cà Rồng Phần 2

Trường Right: Chứa hẹn liên kết (nhỏ trỏ) cho tới nút bé yêu cầu, Có nghĩa là cất một báo cáo đầy đủ để biết nút bé cần của nút ít đó là nút làm sao, vào trường hợp không có nút ít bé cần, trường này được gán một quý hiếm quan trọng đặc biệt.

*

Hình 8:Cấu trúc nút ít của cây nhị phân

Đối cùng với cây ta chỉ cần bắt buộc quyên tâm gìn giữ nút nơi bắt đầu, do từ bỏ nút ít nơi bắt đầu, theo những phía links Left, Right ta hoàn toàn có thể trông nom hồ hết nút ít khác.


*

Hình 9:Biểu diễn cây bằng cấu trúc liên kết


PHÉP. DUYỆT CÂY NHỊ PHÂN

Phép giải pháp xử lý các nút ít bên trên cây cơ mà ta Call chung là phép thăm (Visit) các nút một giải pháp khối hệ thống sao cho từng nút chỉ được thăm một lần Gọi là phnghiền chú tâm cây.

Giả sử rằng ví như nhỏng một nút ít không tồn tại nút ít con trái (hoặc nút bé phải) thì links Left (Right) của nút này được links thẳng cho tới một nút đặc biệt nhưng mà ta hotline là NIL (giỏi NULL), trường hợp cây rỗng thì nút gốc của cây đó cũng được gán bởi NIL. Khi kia bao gồm ba biện pháp chăm bẵm cây xuất xắc được sử dụng:

Duyệt theo đồ vật tự trước (preorder traversal)

Trong phép thông qua theo máy từ trước thì quý hiếm trong những nút ít ngẫu nhiên sẽ được liệt kê trước cực hiếm lưu lại trong nhị nút ít nhỏ của nó, hoàn toàn có thể biểu hiện bởi thủ tục đệ quy sau:


procedure Visit(N); Duyệt nhánh cây nhận N là nút ít nơi bắt đầu của nhánh đó

begin

if N ≠ nil then begin

Visit(Nút con trái của N);

Visit(Nút bé nên của N);

end;

end;


Quá trình chăm chút theo vật dụng từ trước bắt đầu bởi lời Gọi Visit(nút ít gốc).

Như cây ở Hình 9, trường hợp ta coi xét theo sản phẩm trường đoản cú trước thì các cực hiếm vẫn theo lần lượt được liệt kê theo sản phẩm tự:

A B D H I E J C F K G L


Duyệt theo thứ trường đoản cú giữa (inorder traversal)


Trong phxay trông nom theo vật dụng từ bỏ giữa thì quý hiếm trong những nút ngẫu nhiên sẽ được liệt kê sau cực hiếm giữ sinh sống nút ít bé trái với được liệt kê trước giá trị lưu giữ làm việc nút bé nên của nút ít đó, rất có thể diễn tả bởi giấy tờ thủ tục đệ quy sau:


procedure Visit(N); Duyệt nhánh cây thừa nhận N là nút ít nơi bắt đầu của nhánh đó

begin

if N ≠ nil then begin

Visit(Nút ít bé trái của N);

Visit(Nút ít bé cần của N);

end;

end;


Quá trình chăm nom theo máy từ bỏ giữa cũng ban đầu bằng lời Call Visit(nút gốc).

Nhỏng cây sinh sống Hình 9, nếu ta chú tâm theo vật dụng từ bỏ giữa thì những giá trị vẫn theo lần lượt được liệt kê theo máy tự:

H D I B E J A K F C G L

Duyệt theo máy tự sau (postorder traversal)

Trong phxay phê duyệt theo đồ vật từ sau thì cực hiếm trong mỗi nút ngẫu nhiên sẽ được liệt kê sau quý hiếm lưuở nhị nút ít con của nút đó, hoàn toàn có thể miêu tả bằng thủ tục đệ quy sau:


procedure Visit(N); Duyệt nhánh cây thừa nhận N là nút cội của nhánh đó

begin

if N ≠ nil then begin

Visit(Nút ít nhỏ trái của N);

Visit(Nút nhỏ yêu cầu của N);

end;

end;


Quá trình coi ngó theo trang bị từ sau cũng bắt đầu bằng lời Điện thoại tư vấn Visit(nút gốc).

Cũng cùng với cây sinh sống Hình 9, nếu như ta chăm sóc theo vật dụng từ bỏ sau thì các giá trị đang lần lượt được liệt kê theo thiết bị tự:


CÂY K_PHÂN

Cây K_phân là 1 trong dạng cấu tạo cây cơ mà từng nút ít trên cây bao gồm về tối đa K nút con (bao gồm tính cho thứ từ bỏ của các nút ít con).


Biểu diễn cây K_phân bởi mảng

Cũng giống như nlỗi vấn đề màn biểu diễn cây nhị phân, bạn ta rất có thể cung ứng cây K_phân một vài nút ít mang để cho mỗi nút ít nhánh của cây K_phân đều phải có đúng K nút ít con, các nút con được xếp máy tự từ bỏ nút ít con trước tiên tới nút ít bé trang bị K, sau đó đặt số những nút ít trên cây K_phân bắt đầu tự 0 trsinh hoạt đi, ban đầu từ bỏ nấc 1, không còn mức này tới mức khác và từ "trái qua phải" sinh hoạt từng nút.


Theo phương pháp khắc số này, nút nhỏ thứ j của nút ít i là: i * K + j. Nút ít phụ thân của nút x là nút ít (x - 1) divK. Ta hoàn toàn có thể cần sử dụng một mảng T đặt số tự 0 để lưu giữ những cực hiếm bên trên những nút: Giá trị tại nút thứiđược tàng trữ sống bộ phận T.


*

Hình 10:Đánh số những nút ít của cây 3_phân để màn biểu diễn bằng mảng

Biểu diễn cây K_phân bằng kết cấu liên kết


lúc trình diễn cây K_phân bằng cấu tạo links, từng nút của cây là một trong những phiên bản ghi (record) tất cả nhị trường:

Trường Info: Chứa quý hiếm lưu giữ vào nút ít kia.

Trường Links: Là một mảng tất cả K thành phần, thành phần thiết bị i cất link (nhỏ trỏ) cho tới nút con sản phẩm công nghệ i, vào ngôi trường hợp không tồn tại nút con trang bị i thì Links được gán một quý hiếm đặc trưng.

Đối cùng với cây K_ phân, ta cũng chỉ việc lưu lại nút nơi bắt đầu, vì từ nút nơi bắt đầu, theo những hướng links hoàn toàn có thể đi tới mọi nút ít khác.

CÂY TỔNG QUÁT

Trong thực tế, bao gồm một trong những vận dụng yên cầu một kết cấu tài liệu dạng cây tuy vậy không có ràng buộc gì về số nhỏ của một nút bên trên cây, ví như cấu trúc tlỗi mục trên đĩa tốt khối hệ thống đề mục của một cuốn sách. lúc kia, ta buộc phải kiếm tìm giải pháp mô tả một biện pháp công nghệ cấu tạo tài liệu dạng cây tổng quát. Cũng nhỏng ngôi trường vừa lòng cây nhị phân, bạn ta thường màn trình diễn cây bao quát bởi nhị cách: Lưu trữ kế tiếp bởi mảng với tàng trữ bởi cấu tạo link.

Biểu diễn cây bao quát bằng mảng

Để tàng trữ cây tổng quát bởi mảng, trước nhất, ta đặt số những nút bên trên cây ban đầu từ 1 theo một lắp thêm trường đoản cú tuỳ ý. Giả sử cây bao gồm n nút ít thì ta sử dụng:

Một mảng Info<1..n>, trong các số ấy Info là quý giá lưu trong nút ít trang bị i.

Một mảng Children được chia thành n đoạn, đoạn máy i có một dãy tiếp tục các thành phần là chỉ số các nút ít con của nút i. bởi vậy mảng Children đã cất toàn bộ chỉ số của phần nhiều nút ít nhỏ trêncây (ngoại trừ nút gốc) cho nên nó sẽ tất cả n - một phần tử, lưu ý rằng khi phân tách mảng Children làm cho nđoạn thì sẽ sở hữu được hầu hết đoạn rỗng (khớp ứng với list những nút ít nhỏ của một nút lá).


Một mảng Head<1..n + 1>, nhằm khắc ghi vị trí cắt đoạn vào mảng Children: Head là địa điểm đứng tức thì trước đoạn thứ i, tốt nói bí quyết khác: Đoạn nhỏ tính từ chỉ số Head + 1 cho Head của mảng Children đựng chỉ số những nút nhỏ của nút thiết bị i. khi Head = Head tức là đoạn thiết bị i trống rỗng. Quy ước: Head = n - 1.

Giữ lại chỉ số của nút gốc. Ví dụ:

*

Hình 11: Biểu diễn cây tổng thể bằng mảng

Lưu trữ cây tổng quát bởi cấu tạo liên kết

khi tàng trữ cây tổng quát bằng cấu tạo link, mỗi nút ít là 1 trong những phiên bản ghi (record) có tía trường:

Trường Info: Chẹn cực hiếm lưu vào nút kia.

Trường FirstChild: Chẹn link (nhỏ trỏ) tới nút ít con thứ nhất của nút ít đó (bé cả), trong trường đúng theo là nút ít lá (không tồn tại nút con), trường này được gán một quý giá quan trọng đặc biệt.

Trường Sibling: Chẹn link (con trỏ) cho tới nút em cận kề bên đề nghị (nút ít thuộc cha với nút đang xét, Khi chuẩn bị thiết bị tự những con thì nút kia đứng liền sau nút vẫn xét). Trong ngôi trường phù hợp không tồn tại nút ít em kế cận bên đề nghị, ngôi trường này được gán một quý hiếm đặc biệt quan trọng.


*

Hình 12: Cấu trúc nút của cây tổng quát

Dễ thấy được xem đúng mực của cách thức trình diễn, vày từ 1 nút ít N ngẫu nhiên, ta rất có thể đi theo liên kết FirstChild nhằm cho nút ít nhỏ cả, nút này chính là chốt của một danh sách nối đơn những nút nhỏ của nút ít N: từ bỏ nút ít nhỏ cả, đi theo link Sibling, ta hoàn toàn có thể phê chuẩn toàn bộ những nút con của nút ít N.

Bài tập

Bài 1

Viết công tác biểu hiện cây nhị phân sử dụng cấu tạo liên kết, mỗi nút đựng một số nguim, cùng viết những thủ tục chú ý trước, giữa, sau.

Bài 2

Chứng minch rằng giả dụ cây nhị phân tất cả x nút lá và y nút cấp cho 2 thì x = y + 1.

Bài 3

Chứng minh rằng ví như ta biết hàng các nút được thăm của một cây nhị phân Lúc trông nom theo máy trường đoản cú trước cùng sản phẩm từ thân thì rất có thể dựng được cây nhị phân kia. Như vậy con đúng nữa ko đối với máy trường đoản cú trước cùng vật dụng từ sau? Với thiết bị trường đoản cú thân với sản phẩm công nghệ tự sau.

Bài 4

Viết các thủ tục chăm chú trước, thân, sau ko đệ quy.

Next » Đăng ký học demo Đăng cam kết khóa huấn luyện