Một cây tìm kiếm kiếm nhị phân (Binary Search Tree – viết tắt là BST) là một trong những cây nhưng trong những số ấy tất cả các nút ít đều có các điểm lưu ý sau:

Cây con phía bên trái của một nút có khóa (key) nhỏ dại rộng hoặc bằng cực hiếm khóa của nút ít phụ thân (của cây nhỏ này).

Bạn đang xem: Binary search tree là gì

Cây bé mặt bắt buộc của một nút ít gồm khóa lớn hơn hoặc bằng quý hiếm khóa của nút phụ thân (của cây con này).

Vì chũm có thể nói rằng rằng, một cây kiếm tìm tìm nhị phân (BST) phân chia tất cả các cây bé của nó thành hai phần: cây con bên trái và cây nhỏ mặt đề xuất với có thể được tư tưởng nlỗi sau:

left_subtree (keys) ≤ node (key) ≤ right_subtree (keys)

2. Cấu trúc dữ liệu cây

Cây nhị phân là 1 kết cấu tài liệu đặc trưng được sử dụng đến mục tiêu lưu trữ tài liệu.Một cây nhị phân gồm một ĐK đặc biệt là mỗi nút rất có thể bao gồm buổi tối đa nhị nút ít bé.Một cây nhị phân tận dụng tối đa ưu thế của hai giao diện cấu tạo dữ liệu: một mảng đã sắp tới sản phẩm công nghệ từ bỏ cùng một list liên kết (Linked List), do đó việc tìm kiếm sẽ nkhô nóng nlỗi vào mảng đã sắp đến sản phẩm trường đoản cú với những thao tác làm việc chèn với xóa cũng trở thành nhanh hao bằng trong Linked List.

*

2.1 Node

Node vào cây tìm kiếm nhị phân gồm Điểm lưu ý tầm thường là quý hiếm bên yêu cầu lúc nào cũng to hơn quý giá bên trái.Một node trong cây tra cứu kiếm nhị phân đã bao hàm node trái-buộc phải, key cực hiếm của node kia vào cây.

Xem thêm: Blogger Jb Nguyễn Hữu Vinh Là Ai, Jb Nguyễn Hữu Vinh Chúc Mừng

class BSNode var key: T? var left: BSNode? var right: BSNode?public var isLeaf: Bool return left == nil && right == niltrực thuộc tính này để xác định node là leaf giỏi còn node bé nữa.

2.2 Bậc của node cây nhị phân tìm kiếm kiếm

bậc của một nút màn biểu diễn số bé của một nút. Nếu nút ít nơi bắt đầu có bậc là 0, thì nút con tiếp theo sẽ có bậc là 1, cùng nút ít cháu của nó sẽ sở hữu được bậc là 2, …

public func height() -> Int if isLeaf return 0 else return 1 + max(left?.height() ?? 0, right?.height() ?? 0)

3. 1 số hoạt động cơ bạn dạng bên trên cây nhị phân tìm kiếm

3.1 Cyếu thêm node vào cây

Mỗi khi một phần tử được chèn: trước tiên họ đề xuất xác định vị trí đúng chuẩn của thành phần này.Bắt đầu tra cứu tìm tự nút ít gốc, tiếp đến nếu dữ liệu là nhỏ hơn quý giá khóa (key), thì tìm kiếm kiếm địa chỉ còn trống sống cây con phía trái cùng chèn dữ liệu vào đó; nếu như tài liệu là nhỏ tuổi hơn thì tra cứu kiếm địa điểm còn sống sống cây con mặt buộc phải và chèn tài liệu vào kia.

Xem thêm: Hạt Tải Điện Trong Kim Loại Là Gì ? Bài Tập, Ứng Dụng Mật Độ Của Chúng Vào Cỡ Nào

func insert(element key: T) // init root guard root.key != nil else root.key = key return var current: BSNode = root while current.key != nil if key () childBSNode.key = key current.left = childBSNode break else if key > current.key! if let rightBSNode = current.right current = rightBSNode else let childBSNode = BSNode() childBSNode.key = key current.right = childBSNode break }}

3.2 Duyệt cây nhị phân tìm kiếm kiếm

*

lúc bạn muốn coi toàn bộ node vào cây nhị phân search kiếm, bọn họ đang thực hiện coi ngó cây, như ví dụ sống bên trên lúc cẩn thận bọn họ đang in ra những quý giá cây từ nhỏ tuổi độc nhất vô nhị đến lớn số 1 tương ứng: 1, 2, 5, 7, 9, 10.Việc để mắt cây nhị phân kiếm tìm tìm đang bước đầu tự ngọn gàng (root) tiếp đến đi quý phái trái tìm tới quý hiếm bé dại độc nhất vô nhị rồi thứu tự đi không còn thanh lịch bên phải.

func traverse() //trivial condition guard let key = self.key else print("no key provided..") return //process the left side if self.left != nil left?.traverse() print("...the value is: (key) - height: (self.height)..") //process the right side if self.right != nil right?.traverse()

3.3 Tìm kiếm bên trên cây nhị phân

Tìm kiếm bên trên cây nhị phân được triển khai theo 3 bước

nếu như giá trị to hơn giá trị nghỉ ngơi gốc thì tìm tìm mặt nên.ví như gía trị bé dại rộng quý hiếm gốc thì tra cứu tìm bên trái.giả dụ cực hiếm node tiếp theo sau bởi cực hiếm tìm tìm thì trả về node tương xứng còn giả dụ ko trả về nil

*

public func search(value: T) -> BSNode? var node: BSNode? = self.root while let n = node if value n.key! node = n.right else return node return nil

Chuyên mục: Ý NGHĨA

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *