Tải bản đầy đủ (.pdf) (5 trang)

Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p5 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (152.31 KB, 5 trang )

Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 173
Hàm thực hiện việc thêm vào cây nhò phân tìm kiếm BS_Tree một nút có thành
phần Key là NewData. Hàm trả về con trỏ trỏ tới đòa chỉ của nút mới thêm nếu
việc thêm thành công, trong trường hợp ngược lại hàm trả về con trỏ NULL.
BST_Type BST_Add_Node(BST_Type &BS_Tree, T NewData)
{ BST_Type NewNode = BinT_Create_Node(NewData);
if (NewNode == NULL)
return (NewNode);
if (BS_Tree == NULL)
BS_Tree = NewNode;
else
{ BST_Type CurNode = BS_Tree;
int AddLeft = 1;
while (CurNode->Key != NewData)
{ if (CurNode->Key > NewData)
{ AddLeft = 1;
if (CurNode->BST_Left != NULL)
CurNode = CurNode->BST_Left;
else
break;
}
else // CurNode->Key < NewData
{ AddLeft = 0;
if (CurNode->BST_Right != NULL)
CurNode = CurNode->BST_Right;
else
break;
}
}
if (AddLeft == 1)


CurNode->BST_Left = NewNode;
else
CurNode->BST_Right = NewNode;
}
return (NewNode);
}
c. Loại bỏ (hủy) một nút trên cây:
Cũng như thao tác thêm một nút vào trong cây nhò phân tìm kiếm, thao tác hủy một
nút trên cây nhò phân tìm kiếm cũng phải bảo đảm cho cây sau khi hủy nút đó thì
cây vẫn là một cây nhò phân tìm kiếm. Đây là một thao tác không đơn giản bởi nếu
không cẩn thận chúng ta sẽ biến cây thành một rừng.
Giả sử chúng ta cần hủy nút có thành phần dữ liệu (Key) là DelData ra khỏi cây nhò
phân tìm kiếm. Điều đầu tiên trong thao tác này là chúng ta phải tìm kiếm đòa chỉ
của nút cần hủy là DelNode, sau đó mới tiến hành hủy nút có đòa chỉ là DelNode này
nếu tìm thấy (Do vậy thuật toán này còn được gọi là thuật toán tìm kiếm và loại bỏ
trên cây). Quá trình tìm kiếm đã trình bày ở trên, ở đây chúng ta chỉ trình bày thao
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V

i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C

h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m

.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 174
tác hủy khi tìm thấy nút có đòa chỉ DelNode (DelNode->Key = DelData) và trong quá
trình tìm kiếm chúng ta giữ đòa chỉ nút cha của nút cần hủy là PrDelNode.
Việc hủy nút có đòa chỉ DelNode có thể xảy ra một trong ba trường hợp sau:
c
1
) DelNode là nút lá:
Trong trường hợp này đơn giản chúng ta chỉ cần cắt bỏ mối quan hệ cha-con giữa
PrDelNode và DelNode bằng cách cho con trỏ PrDelNode->BST_Left (nếu DelNode là
nút con bên trái của PrDelNode) hoặc cho con trỏ PrDelNode->BST_Right (nếu
DelNode là nút con bên phải của PrDelNode) về con trỏ NULL và tiến hành hủy
(delete) nút có đòa chỉ DelNode này.
Ví dụ:
Giả sử cần hủy nút có Key = 30 (DelData = 30)
BSTree

60

25 PrDelNode 65

19 DelNode 40 NULL NULL

10 NULL 30 44

NULL NULL NULL NULL NULL NULL
Trong trường hợp này chúng ta cho PrDelNode->BST_Left = NULL:
BSTree


60

25 PrDelNode 65

19 DelNode 40 NULL NULL

10 NULL NULL 44
30
NULL NULL NULL NULL
NULL NULL
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w

w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e


V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 175
Kết quả sau khi hủy:
BSTree


60

25 PrDelNode 65

19 40 NULL NULL

10 NULL NULL 44

NULL NULL NULL NULL
c
2
) DelNode là nút chỉ có 01 nút gốc cây con:
Trong trường hợp này cũng khá đơn giản chúng ta chỉ cần chuyển mối quan hệ cha-
con giữa PrDelNode và DelNode thành mối quan hệ cha-con giữa PrDelNode và nút
gốc cây con của DelNode rồi tiến hành cắt bỏ mối quan hệ cha-con giữa DelNode và
01 nút gốc cây con của nó và tiến hành hủy nút có đòa chỉ DelNode này.
Ví dụ:
Giả sử cần hủy nút có Key = 19 (DelData = 19)
BSTree

PrDelNode 60

DelNode 25 65

19 40 NULL NULL

10 NULL 30 44

NULL NULL NULL NULL NULL NULL
Click to buy NOW!

P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a

c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d

o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 176
Trong trường hợp này chúng ta thực hiện các bước:
B1: PrDelNode->BST_Left = DelNode->BST_Left
B2: DelNode->BST_Left = NULL
BSTree

PrDelNode 60

DelNode 25 65

19 40 NULL NULL

10 NULL NULL 30 44

NULL NULL NULL NULL NULL NULL

Kết quả sau khi hủy:
BSTree

PrDelNode 60

25 65

10 40 NULL NULL

NULL NULL 30 44

NULL NULL NULL NULL
c
3
) DelNode là nút có đủ 02 nút gốc cây con:
Trường hợp này khá phức tạp, việc hủy có thể tiến hành theo một trong hai cách sau
đây (có thể có nhiều cách khác nữa song ở đây chúng ta chỉ trình bày hai cách):
- Chuyển 02 cây con của DelNode về thành một cây con:
Theo phương pháp này chúng ta sẽ chuyển cây con phải của DelNode
(DelNodeBST_Right) về thành cây con phải của cây con có nút gốc là nút phải
nhất trong cây con trái của DelNode (phải nhất trong DelNode->BST_Left), hoặc
chuyển cây con trái của DelNode (DelNode->BST_Left) về thành cây con trái của
cây con có nút gốc là nút trái nhất trong cây con phải của DelNode (trái nhất trong
Click to buy NOW!
P
D
F
-
X
C

h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m

Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r

a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 177
DelNode->BST_Right). Sau khi chuyển thì DelNode sẽ trở thành nút lá hoặc nút chỉ
có 01 cây con và chúng ta hủy DelNode như đối với trường hợp c
1
) và c
2
) ở trên.
Ví dụ:
Giả sử cần hủy nút có Key = 25 (DelData = 25). Chúng ta sẽ chuyển cây con
phải của DelNode (DelNode->BST_Right) về thành cây con phải của cây con
có nút gốc là nút phải nhất trong cây con trái của DelNode (nút MRNode).
PrDelNode BSTree

DelNode 60

MRNode 25 65

19 40 NULL NULL

10 NULL 30 44


NULL NULL NULL NULL NULL NULL
Trong trường hợp này chúng ta thực hiện các bước:
B1: MRNode->BST_Right = DelNode->BST_Right
B2: DelNode->BST_Right = NULL
PrDelNode BSTree

DelNode 60

MRNode 25 65

19 NULL 40 NULL NULL

10 30 44

NULL NULL NULL NULL NULL NULL
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i

e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h

a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.

×