Cỏc thứ tự duyệt cõy quan trọng

Một phần của tài liệu giáo trình cấu trúc dữ liệu (Trang 70 - 72)

DANH SÁCH LIấN KẾT 4.1 Giới thiệu

5.3.Cỏc thứ tự duyệt cõy quan trọng

Duyệt cõy là một qui tắc cho phộp đi qua lần lượt tất cả cỏc nỳt của cõy mỗi nỳt đỳng một lần, danh sỏch liệt kờ cỏc nỳt (tờn nỳt hoặc giỏ trị chứa bờn trong nỳt) theo thứ tự đi qua gọi là danh sỏch duyệt cõy. Cú 3 cỏch duyệt cõy quan trọng: Duyệt thứ tự trước (Tiền tự - preorder), duyệt thứ tự giữa (Trung tự - inorder), duyệt thứ tự sau (Hậu tự - postorder). Như vậy là tại mỗi nỳt ta cú 3 cỏch lựa chọn: hoặc đi sang trỏi, hoặc đi sang phải hoặc xử lý dữ liệu của ngay nỳt đú. Việc sử dụng dữ liệu như thế nào tại thời điểm này (Như in dữ liệu, tớnh toỏn dữ liệu...) là khụng quan trọng. Quan trọng là khi nào thỡ một quỏ trỡnh xử lý được kớch hoạt chứ ko phải là xử lý cỏi gỡ. Tờn của 3 cỏch duyệt cõy trờn được đặt căn cứ vào thời điểm của quỏ trỡnh xử lý dữ liệu của nỳt đú so với việc rẽ sang trỏi hay sang phải

PreOrder InOrder PostOrder

Xử lý nỳt

Xử lý nỳt Rẽ sang trỏi Rẽ sang trỏi

Rẽ sang trỏi Xử lý nỳtXử lý nỳt Rẽ sang phải Rẽ sang phải Rẽ sang phải Xử lý nỳtXử lý nỳt

Cú thể định nghĩa cỏc phộp duyệt cõy tổng quỏt một cỏch đệ qui như sau:

∗ Cõy rỗng thỡ danh sỏch duyệt cõy là rỗng và nú được coi là biểu thức duyệt tiền tự, trung tự, hậu tự của cõy.

n

∗ Cõy chỉ cú một nỳt thỡ danh sỏch duyệt cõy gồm chỉ một nỳt đú và nú được coi là biểu thức duyệt tiền tự, trung tự, hậu tự của cõy.

∗ Ngược lại: giả sử cõy T cú nỳt gốc là n và cú cỏc cõy con lần lượt là T1, ... , Tn thỡ:

- Biểu thức duyệt tiền tự của cõy T là liệt kờ nỳt n kế tiếp là biểu thức duyệt tiền tự của cỏc cõy T1, T2, .., Tn theo thứ tự đú.

- Biểu thức duyệt trung tự của cõy T là biểu thức duyệt trung tự của cõy T1 kế tiếp là nỳt n rồi đến biểu thức duyệt trung tự của cỏc cõy T2,.., Tn theo thứ tự đú.

- Biểu thức duyệt hậu tự của cõy T là biểu thức duyệt hậu tự của cỏc cõy T1, T2,.., Tn theo thứ tự đú rồi đến nỳt n.

Vớ dụ: Cho cõy như trong hỡnh sau

Khi đú cỏc biểu thức duyệt cõy lần lượt là: − Tiền tự : A B C D E F H K L − Trung tự : C B E D F A K H L − Hậu tự : C E F D B K L H A

Cú thể viết cỏc giải thuật duyệt cõy đệ qui như sau:

Procedure PREORDER(n:node);

begin

liệt_kờ_nỳt_n;

for (từng nỳt con c của nỳt n theo thứ tự từ trỏi sang phải) do

PREORDER(c); A B H C D E F K L

end;

Procedure INORDER(n:node);

begin

if (n là nỳt lỏ) then (liệt_kờ_nỳt_n)

else begin

INORDER(con trỏi nhất của nỳt n); liệt_kờ_nỳt_n;

for (mỗi nỳt con c của nỳt n, trừ nỳt con trỏi nhất, theo thứ tự từ trỏi sang phải) do

INORDER(c); end; end; Procedure POSTORDER(c:node); begin if (n là nỳt lỏ) then (liệt_kờ_nỳt_n) else begin

for (mỗi nỳt con c của nỳt n theo thứ tự từ trỏi sang phải) do

POSTORDER(c); liệt_kờ_nỳt_n; (adsbygoogle = window.adsbygoogle || []).push({});

end; end;

Một phần của tài liệu giáo trình cấu trúc dữ liệu (Trang 70 - 72)