- vừa được xem lúc

[DSA] Binary Search Trees

0 0 2

Người đăng: Tri Lương

Theo Viblo Asia

Giới thiệu

image.png

Tree gồm có:

  • Root: là node cao nhất trong B-Tree. vd: node A là root.
  • Child: là 1 node liên kết trực tiếp với một node khác khi di chuyển từ root. vd: B, C, D là child của A.
  • Parent: node phía trước child. vd: B là parent của E, F.
  • Siblings: tập hợp các node có cùng parent: vd: E, F là siblings vì cùng có parent là B.
  • Leaf: là 1 node ko có children. vd: E, F, G, I là leaf.
  • Edge: là sự liên kết giữa node này với node khác.

Trees là kiểu dữ liệu phi tuyến tính (non-linear), khác với kiểu dữ liệu: linked list, array, queue, stack là kiểu dữ liệu tuyến tính (linear).

Các loại trees:

  • Trees
  • Binary trees
    • Mỗi parent có nhiều nhất 2 node con.
  • Binary Search trees:
    • Mỗi parent có nhiều nhất 2 node con.
    • Node nhỏ hơn parent nằm bên trái.
    • Node lớn hơn parent nằm bên phải.

Khởi tạo

class NodeBinaryTree { value; left: NodeBinaryTree | null; right: NodeBinaryTree | null; constructor(value) { this.value = value; this.left = null; this.right = null; }
} class BinarySearchTree { root: NodeBinaryTree | null; constructor() { this.root = null; } insert(value) {} find(value) {}
}

Khởi tạo các method

insert

 insert(value) { const newNode = new NodeBinaryTree(value); if (!this.root) { this.root = newNode; return this; } let currentParent = this.root; while (true) { if (value < currentParent.value) { if (currentParent.left) { currentParent = currentParent.left; } else { currentParent.left = newNode; return this; } } else if (value > currentParent.value) { if (currentParent.right) { currentParent = currentParent.right; } else { currentParent.right = newNode; return this; } } else { return undefined; } } }

find

 find(value) { if (!this.root) return undefined; let currentParent = this.root; while (currentParent) { if (value === currentParent.value) { break; } else if (value < currentParent?.value) { currentParent = currentParent.left; } else { currentParent = currentParent.right; } } return currentParent; }

Độ phức tạp

Method Big O
Insertion O(log n)
Searching O(log n)

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đôi chút về cấu trúc dữ liệu và thuật toán

Theo anh Phạm Huy Hoàng (toidicodedao) đã viết trong blog của mình là kiến thức trong ngành IT có 2 loại, một là càng để lâu thì càng cũ, lạc hậu và trở lên vô dụng. Hai là càng để lâu thì càng có giá trị thậm chí ngày càng có giá.

0 0 43

- vừa được xem lúc

Cấu trúc dữ liệu Merkle Tree

Cây Merkle là một cây nhị phân có thứ tự được xây dựng từ một dãy các đối tượng dữ liệu (d1, d2,...,dn) sử dụng hàm băm h. Các “lá” của cây là các giá trị băm h(di) đối với 1 ≤ i ≤ n.

0 0 66

- vừa được xem lúc

Cách xây dựng cấu trúc dữ liệu Stack và Queue.

Mở đầu. Hello các bạn, hôm nay mình sẽ chia sẻ với các bạn cách để có thể tự xây dựng 2 loại cấu trúc dữ liệu stack(ngăn xếp) và queue(hàng đợi) sử dụng mảng trong C++;.

0 0 43

- vừa được xem lúc

Tối ưu ứng dụng với cấu trúc dữ liệu cơ bản

Ở Việt Nam có một nghịch lý ai cũng biết: hầu hết sinh viên ngành CNTT đều đã học cấu trúc dữ liệu và giải thuật, thuộc các môn bắt buộc. Thế nhưng lại rất hiếm khi ứng dụng vào công việc hoặc bị loại

0 0 49

- vừa được xem lúc

Chương 1: Introduction - Analysis of Algorithrms

Trong bài viết này mình sẽ nói về cách chúng ta sẽ sử dụng để phân tích và so sánh các loại thuật toán khác nhau. 1.

0 0 27

- vừa được xem lúc

Chương 1: Introduction - Các khái niệm cơ bản

Lời nói đầu. Trước khi có máy tính, đã có các thuật toán.

0 0 25