Này, ta sẽ sử dụng biến địa phơng found có kiểu boolean để điều khiển vòng

Một phần của tài liệu Cây và các khái niệm về cây (Trang 26 - 27)

lặp nó có giá trị ban đầu là falsẹ Nếu tìm kiếm thành công thì found nhận giá trị true, vòng lặp kết thúc và P trỏ vào đính tìm thấỵ Còn nếu tìm kiếm không kết quả thì giá trị của Found vẫn là false và giá trị của P là m1.

procedure Search (x : keytype, Root : pointer ; var P: poInfer) ; var found : boolean ;

begin

P: = Root ;

found : = false ;

while (P < > ml) and (not found) do if Pˆ.key = x then found : = true

else iŸ x < Pˆ.key then P : = Pˆ.left else P : = Pˆ.ripht ;

end ;

2. Xen vào cây tùm kiếm.

Khi cập nhật thông tin đợc tổ chức dới dạng cây tìm kiếm nhị phân, ta thờng xuyên phải thực hiện các phép toán xen vào và loại bỏ khỏi cây ftìm kiếm. Chúng ta cần phải xen vào cây tìm kiếm nhị phân một đỉnh mới có khoá x cho trớc, sao cho sau khi xen vào cây vẫn còn là cây tìm kiếm nhị phân.

Đầu tiên ta viết thủ tục đệ qui xen vào cây tìm kiếm. procedure Insert (var Root : poInfer : x : keytfyp©e) ;

{xen vào cây gốc Root đỉnh mới với khoá là x} var Q) : pOInIer ;

begin

IÝ Root = niÏ then begin

new (Q) ; {tao ra đỉnh mới } Qˆ.key:=x;

Qˆ.left : = nIl ; Qˆ.riphi : = ml ; Root : = Q; end

else with Rootˆ do

IÝ x < key then Insert (left, x)

else IÝ x > key then Insert (ritht, x) end ;

Sau đây ta sẽ viết thủ tục không đệ qui xen vào cây tìm kiếm. Trong thủ tục này ta sẽ sử dụng biến con trỏ địa phơng P chạy trên các đỉnh của cây bất đầu từ gốc. Khi đang ở một đỉnh nào đó, P sẽ chạy xuống đỉnh con trái (phải) tuỳ theo khoá của đính đó lớn hơn (nhỏ hơn) khoá x.

Nếu tại một đỉnh nào đó, P cần phải chạy xuống đính con trái (phảiI), nhne đỉnh đó không có con trái (phải) thì ta treó đỉnh mới vào bên trái (phải) đỉnh đó. Điều kiện P = nïl sẽ kết thúc vòng lặp.

procedure Insert (var Root : poInfer ; x : keytype) ; var P, Q: poInfer ; begin new (Q); Q^.key :=x; Q^.left : = nIÏ ; Q^.right : = nIÏ ;

Một phần của tài liệu Cây và các khái niệm về cây (Trang 26 - 27)