✨Cây (cấu trúc dữ liệu)

Cây (cấu trúc dữ liệu)

nhỏ|Ví dụ về một cây nhị phân Trong khoa học máy tính, cây là một cấu trúc dữ liệu được sử dụng rộng rãi gồm một tập hợp các nút (tiếng Anh: node) được liên kết với nhau theo quan hệ cha-con. Cây trong cấu trúc dữ liệu đầu tiên là mô phỏng (hay nói cách khác là sự sao chép) của cây (có gốc) trong lý thuyết đồ thị. Hầu như mọi khái niệm trong cây của lý thuyết đồ thị đều được thể hiện trong cấu trúc dữ liệu. Tuy nhiên cây trong cấu trúc dữ liệu đã tìm được ứng dụng phong phú và hiệu quả trong nhiều giải thuật. Khi phân tích các giải thuật trên cấu trúc dữ liệu cây, người ta vẫn thường vẽ ra các cây tương ứng trong lý thuyết đồ thị.

Các nút

Một nút có thể chứa một giá trị, một điều kiện, một cấu trúc dữ liệu riêng biệt hoặc chính một cây. Mỗi nút trong một cây có thể không có hoặc có một số nút con, các nút con có mức cao hơn nó (theo quy ước khác với cây tự nhiên, cây trong cấu trúc dữ liệu phát triển từ trên xuống). Một nút có con được gọi là nút cha của các nút con. Một nút có nhiều nhất một nút cha.

Nút gốc

Trong mỗi cây có một nút đặc biệt được gọi là nút gốc (hay nói đơn giản là gốc). Nút gốc là nút duy nhất không có nút cha. Nút gốc là nơi khởi đầu của nhiều giải thuật trên cây. Tất cả các nút khác được nối về nút gốc bằng một đường đi qua các cạnh hay các liên kết

Các nút lá

Các nút không có nút con được gọi là nút lá hay gọi đơn giản là .

Các nút trong (nút nhánh)

nút trong của một cây là nút trên cây có ít nhất một con, nghĩa là các nút không phải là lá. Các khái niệm về mức của mỗi nút, chiều cao của cây được định nghĩa giống như cây trong lý thuyết đồ thị.

Cây con

Một cây con là một bộ phận của cấu trúc dữ liệu cây mà tự nó cũng là một cây. Một nút bất kỳ trong cây T, cùng với các nút dưới nó tạo thành một cây con của T.

Cây trong lý thuyết đồ thị

Trong lý thuyết đồ thị, một cây là một đồ thị liên thông và không có chu trình. Cây như vậy còn được gọi là cây tự do. Một cây có gốc là một cây tự do, trong đó có một đỉnh được chọn làm gốc và các cạnh được định hướng là hướng của các đường đi đơn ra khỏi gốc tới các đỉnh khác. Trong trường hợp này, hai đỉnh bất kỳ được nối với nhau bao hàm chúng có qua hệ cha-con. Một đồ thị không chu trình với nhiều thành phần liên thông được gọi là một rừng.

Cây sắp thứ tự

Có hai dạng cấu trúc cơ sở của cây là cây không thứ tự và cây có thứ tự. Một cây không thứ tự là cây có cấu trúc cây, trong đó giữa các con của một nút, không có thứ tự nào. Một cây, trong đó các con của một nút tuân theo một thứ tự xác định được gọi là cây có thứ tự. Các cây có thứ tự có nhiều ứng dụng sâu sắc trong cấu trúc của cây. Cây tìm kiếm nhị phân là một cây sắp thứ tự điển hình.

Cây tổng quát và cây nhị phân

Các cây trong đó mỗi nút có thể có nhiều hơn hai con được gọi là cây tổng quát, các cây trong đó mỗi nút có không quá hai con được gọi là cây nhị phân.

Biểu diễn cây

Có nhiều phương pháp biểu diễn cây. Cách thường dùng nhất là biểu diễn mỗi nút như một dữ liệu kiểu bản ghi, mỗi nút chứa các con trỏ tới các con hoặc cha của nó, hoặc cả hai. Cây cũng có thể biểu diễn bằng các mảng cùng với quan hệ giữa các vị trí trong mảng.

Biểu diễn bằng các nút với các con trỏ

Mỗi nút là một dữ liệu kiểu bản ghi với ba trường: Một trường thường gọi là INFOR, chứa thông tin lưu trữ tại nút đó. Thông tin này có thể chỉ là một số, một ký tự, cũng có thể là một tập hợp dữ liệu rất phức tạp. Hai trường LLINK và RLINK chứa các liên kết trái và phải. Nếu cây là cây nhị phân, LLINK trỏ tới con trái của nút, RLINK trỏ tới con phải của nút. Nếu cây là cây tổng quát, LLINK trỏ tới con cực trái và RLINK trỏ tới em kế cận phải của nút đó. Do đó danh sách các nút biểu diễn một cây tổng quát, khi được xem là biểu diễn của cây nhị phân sẽ cho một cây nhị phân. Cây nhị phân này được gọi là cây nhị phân tương đương với cây tổng quát ban đầu.

Biểu diễn cây nhị phân bằng mảng

Cây nhị phân mà mỗi đỉnh trong có đúng hai con được gọi là cây nhị phân đầy đủ (full binary tree)

Cây nhị phân đầy đủ mà tất cả các lá có cùng một mức được gọi là cây nhị phân hoàn chỉnh (perfect binary tree). Một số tài liệu gọi cây loại này là cây đầy đủ.

Cây nhị phân mà mỗi đỉnh của nó đã có con phải thì cũng có con trái được gọi là cây nhị phân gần hoàn chỉnh (almost complete binary tree). (Định nghĩa này sai, theo đó cây suy biến lệch trái cũng là gần hoàn chỉnh?)

Ta có thể dùng một mảng gồm 2^{h+1}-1 phần tử để biểu diễn cây nhị phân, bằng cách lần lượt lưu trữ thông tin của mỗi nút vào mảng theo thứ tự từ trên xuống dưới, từ trái sang phải. Khi đó con trái của nút thứ i là phần tử thứ 2*i, con phải là phần tử thứ 2*i+1. Cha của phần tử thứ i là phần tử thứ int(i/2).Ta gán giá trị Null cho các vị trí còn thiếu.

Một cách khác, dùng một mảng hai chiều trong dòng thứ nhất ghi các thông tin của nút, dòng thứ hai ghi chỉ số của nút cha của nút đó với dấu + nếu nút hiện tại là con trái, với dấu - nếu nút hiện tại là con phải của nút cha.

Các phương pháp duyệt cây

Duyệt một cây là một trình tự làm việc với các nút trong cây, trình tự này giống như một chuyến đi qua các nút trên cây theo các liên kết cha-con, bắt đầu từ nút gốc. Các giải thuật duyệt khác nhau về thứ tự "viếng thăm" giữa một nút cha và các nút con. Duyệt tiền thứ tự Duyệt trung thứ tự *Duyệt hậu thứ tự

Các giải thuật chung

  • Tìm kiếm một mục trên cây
  • Bổ sung một mục mới
  • Xóa một mục
👁️ 1 | 🔗 | 💖 | ✨ | 🌍 | ⌚
nhỏ|Ví dụ về một cây nhị phân Trong khoa học máy tính, **cây** là một cấu trúc dữ liệu được sử dụng rộng rãi gồm một tập hợp các nút (tiếng Anh: _node_) được liên
phải|192|[[Cây nhị phân, một kiểu đơn giản của cấu trúc dữ liệu liên kết rẽ nhánh.]] thumb|right|Bảng băm Trong khoa học máy tính, **cấu trúc dữ liệu** là một cách lưu dữ liệu trong máy
Đây là danh sách các cấu trúc dữ liệu. Bạn có thể xem danh sách thuật ngữ rộng hơn tại danh sách các thuật ngữ liên quan đến cấu trúc dữ liệu và giải thuật.
Trong khoa học máy tính, **cấu trúc dữ liệu cho các tập hợp không giao nhau** là một cấu trúc dữ liệu để lưu trữ một tập hợp các phần tử được phân chia thành
Trong khoa học máy tính, **đống** (tiếng Anh: _heap_) là một cấu trúc dữ liệu dựa trên cây thỏa mãn _tính chất đống_: nếu B là nút con của A thì khóa(A)≥khóa(B). Một hệ quả
thumb|Một ví dụ về lấy dữ liệu đầu ra từ truy vấn cơ sở dữ liệu SQL. **Cơ sở dữ liệu** () là một tập hợp các dữ liệu có tổ chức liên quan đến
phải|khung|Một cây có dán nhãn với 6 đỉnh và 5 cạnh **Cây** là khái niệm quan trọng trong lý thuyết đồ thị, cấu trúc dữ liệu và giải thuật. Cây là một đồ thị mà
phải|Cây hậu tố cho xâu BANANA. Mỗi xâu con được kết thúc bởi ký tự đặc biệt $. Sáu đường từ gốc đến lá (ký hiệu bởi ô vuông) tương ứng với sáu hậu tố
**Cây đỏ đen** (tiếng Anh: _red-black tree_) là một dạng cây tìm kiếm nhị phân tự cân bằng, một cấu trúc dữ liệu được sử dụng trong khoa học máy tính. Cấu trúc ban đầu
**Mô hình cơ sở dữ liệu phân cấp** (tiếng Anh: hierarchical database model) là một loại mô hình dữ liệu, trong đó dữ liệu được tổ chức thành cấu trúc dạng cây. Dữ liệu được
Trong khoa học máy tính, **B-cây** là một cấu trúc dữ liệu dạng cây cho phép tìm kiếm, truy cập tuần tự, chèn, xóa trong thời gian lôgarit. B-cây là một tổng quát hóa của
**Cây tìm kiếm nhị phân** (viết tắt tiếng Anh: BST - _Binary Search Tree_) là một cấu trúc dữ liệu rất thuận lợi cho bài toán tìm kiếm. Mỗi cây tìm kiếm nhị phân đều
**Cây van Emde Boas** (hay **hàng đợi ưu tiên van Emde Boas**), còn gọi là cây vEB, là một cấu trúc dữ liệu cây để biểu diễn mảng liên hợp có khóa là số tự
Trong ngành khoa học máy tính, **cây cú pháp trừu tượng** (AST, abstract syntax tree) là một cây có giới hạn, có nhãn và có định hướng. Đây là cấu trúc cây mà các nút
Trong khoa học máy tính, một **Cây AVL** là một cây tìm kiếm nhị phân tự cân bằng, và là cấu trúc dữ liệu đầu tiên có khả năng này. Trong một cây AVL, tại
**Tái tạo và thu thập dữ liệu 3D** là việc tạo ra các mô hình ba chiều hoặc không gian từ dữ liệu cảm biến. Các kỹ thuật và lý thuyết, nói chung, hoạt động
Trong khoa học máy tính, **treap** và **cây tìm kiếm nhị phân ngẫu nhiên hóa** là hai dạng cấu trúc dữ liệu cây tìm kiếm nhị phân liên quan chặt chẽ đến nhau. Chúng lưu
nhỏ|phải|300x300|[[Tam giác Sierpinski]] **Đệ quy** (tiếng Anh: _recursion_) là phương pháp dùng trong các chương trình máy tính trong đó có một hàm tự gọi chính nó. ## Khái niệm hình thức về đệ quy
right|thumb|400x400px|Bên trái: Chia đệ quy một khối lập phương ra làm tám. Bên phải: Cây octree tương ứng. Cây **octree** là một cấu trúc dữ liệu dạng cây mà mỗi nút trong có chính xác
**Dữ liệu nửa cấu trúc** (tiếng Anh: _Semi-structured data_) là loại dữ liệu tự mô tả và không có giản đồ (_schema_), nghĩa là không có mô tả riêng biệt về kiểu và cấu trúc
Trong lĩnh vực điện toán**, Khôi phục dữ liệu** (hay **Phục hồi dữ liệu**) là quá trình sử dụng các thiết bị, phần mềm lấy lại dữ liệu từ bị hư hỏng, lỗi hoặc bị
nhỏ| Trung tâm dữ liệu [[ARSAT (2014) ]] **Trung tâm dữ liệu** (tiếng Anh Mỹ: data center, hoặc tiếng Anh Anh: data centre), là một tòa nhà, không gian dành riêng trong tòa nhà hoặc
nhỏ| Ví dụ về thu thập dữ liệu trong khoa học sinh học: [[Chim cánh cụt Adélie được xác định và được cân mỗi khi chúng đi qua cầu cân tự động trên đường đến
nhỏ|315x315px|Một danh bạ điện thoại nhỏ được xem như một bảng băm. Trong khoa học máy tính, **bảng băm** là một cấu trúc dữ liệu sử dụng hàm băm để ánh xạ từ giá trị
**Nút** (tiếng Anh: _node_) là một đơn vị cơ bản của cấu trúc dữ liệu, ví dụ như danh sách liên kết (_linked list) hay cây (_tree''). Các nút chứa dữ liệu và cũng có
**Tập dữ liệu COVID-19** là các cơ sở dữ liệu công khai nhằm chia sẻ dữ liệu các ca bệnh và thông tin y tế liên quan đến đại dịch COVID-19. ## Dữ liệu tổng
nhỏ|Một ví dụ về cây phân loại CART **Khai phá dữ liệu** (_data mining_) Là quá trình tính toán để tìm ra các mẫu trong các bộ dữ liệu lớn liên quan đến các phương
nhỏ|phải|Quyết định bản chất nó là sự lựa chọn Trong lý thuyết quyết định (chẳng hạn quản lý rủi ro), một **cây quyết định** (tiếng Anh: _decision tree_) là một đồ thị của các quyết
Trong khoa học máy tính, **cây 2-3-4** là cây nhiều nhánh mà mỗi nút của nó có thể có đến bốn nút con và ba mục dữ liệu. Cây 2-3-4 là cây cân bằng giống
thumb|Một cây nhị phân được gắn nhãn có kích thước là 9 và chiều cao là 3, với nút gốc có giá trị là 2. Cây trên không cân bằng và không được sắp xếp.
Trong khoa học máy tính, **trie**, hay **cây tiền tố**, là một cấu trúc dữ liệu sử dụng cây có thứ tự, dùng để lưu trữ một mảng liên kết của các xâu ký tự.
Trong khoa học máy tính, **Phép quay** trên các cây nhị phân là một phép biến đổi làm thay đổi vai trò cha con giữa 2 nút trên cây. Có hai phép quay là quay
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
Trong khoa học máy tính và lý thuyết thông tin, **mã hóa Huffman** là một thuật toán mã hóa dùng để nén dữ liệu. Nó dựa trên bảng tần suất xuất hiện các ký tự
Một **đống nhị phân** là một cấu trúc dữ liệu đống dựa trên cây nhị phân. Đống nhị phân thường được sử dụng để triển khai hàng đợi ưu tiên. Đống nhị phân được giới
Mọi tổ chức cung cấp dịch vụ dữ liệu hiện nay đều chấp nhận thực tế rằng việc có thể quản lý dữ liệu tốt cùng với việc cho phép khách hàng quản lý dữ
Mọi tổ chức cung cấp dịch vụ dữ liệu hiện nay đều chấp nhận thực tế rằng việc có thể quản lý dữ liệu tốt cùng với việc cho phép khách hàng quản lý dữ
Mọi tổ chức cung cấp dịch vụ dữ liệu hiện nay đều chấp nhận thực tế rằng việc có thể quản lý dữ liệu tốt cùng với việc cho phép khách hàng quản lý dữ
nhỏ|Mô phỏng thuật toán sắp xếp vun đống|403x403px **Sắp xếp vun đống** (_Heapsort_) dựa trên một cấu trúc dữ liệu được gọi là đống nhị phân (_binary heap_), gọi đơn giản là đống. Trong mục
**Bảng tra cứu dãy số nguyên trực tuyến** (_The On-Line Encyclopedia of Integer Sequences_), hay đơn giản là **Sloane's**, là cơ sở dữ liệu chuỗi số nguyên trực tuyến. Bảng được tạo ra và bảo
Ngày nay, Big Data đã trở thành một thuật ngữ quen thuộc trong thế giới kinh doanh. Các doanh nghiệp đang không ngừng cải tiến, tìm kiếm cách khai thác và phân tích khối lượng
**Kiến trúc phần mềm** của một chương trình máy tính hay một hệ thống tính toán là cấu trúc của các thành phần trong hệ thống đó. _Kiến trúc phần mềm_ bao gồm các phần
**Tài liệu Panama** hay **Hồ sơ Panama** () là một bộ 11,5 triệu tài liệu mật được tạo ra bởi nhà cung cấp dịch vụ của công ty Panama Mossack Fonseca cung cấp thông tin
Các bảng băm phân tán **Bảng băm phân tán** (tiếng Anh: _distributed hash table_, viết tắt **DHT**) là một lớp các hệ thống phân tán không tập trung, cung cấp một dịch vụ tra cứu
- Lí do để lựa chọn ? Thành phần chứa Keratin,Collagen, giàu Protein, muối khoáng và chiết xuất từ cây xơ thơm, hương thảo, quả óc chó góp phần làm dưỡng ẩm, phục hồi, tái
nhỏ|phải|Cấu trúc đô thị Udaipur nhìn từ xa **Cấu trúc đô thị** (_Urban structure_) là sự sắp xếp, bố trí, quy hoạch sử dụng đất (hệ số sử dụng đất K) trong khu đô thị,
Biến dữ liệu thành trí tuệ không chỉ là chuyện tương lai – đó là hiện tại. Big Data cung cấp lượng “nhiên liệu” khổng lồ, trong khi Machine Learning (ML) chính là “động cơ”
Big Data (dữ liệu lớn) là thuật ngữ dùng để chỉ khối lượng dữ liệu khổng lồ, được tạo ra với tốc độ cao và ở nhiều định dạng khác nhau như số liệu thị
Storytelling with data Lets practice - Thực hành kể chuyện thông qua dữ liệu Thực hành kể chuyện thông qua dữ liệu không đơn thuần chỉ là một cuốn sách. Nó mang đến cho bạn
Storytelling with data Lets practice - Thực hành kể chuyện thông qua dữ liệu Thực hành kể chuyện thông qua dữ liệu không đơn thuần chỉ là một cuốn sách. Nó mang đến cho bạn