Menu
×

Được chứng nhận

Ghi lại kiến ​​thức của bạn

Đăng nhập Đăng ký

Tạo Tài khoản Example.com.vn miễn phí để cải thiện trải nghiệm học tập của bạn

Người tìm đường và việc học của tôi

Theo dõi tiến độ học tập của bạn tại Example.com.vn và thu thập phần thưởng

Nâng cấp

Trở thành người dùng PLUS và mở khóa các tính năng mạnh mẽ (không có quảng cáo, lưu trữ, hỗ trợ, ..)

Bắt đầu từ đâu

Bạn không chắc chắn muốn bắt đầu từ đâu? Đi theo con đường được hướng dẫn của chúng tôi

Trình chỉnh sửa mã (Dùng thử)

Với trình chỉnh sửa mã trực tuyến của chúng tôi, bạn có thể chỉnh sửa mã và xem kết quả trong trình duyệt của mình

Video

Tìm hiểu những điều cơ bản về HTML qua video hướng dẫn thú vị và hấp dẫn

Mẫu

Chúng tôi đã tạo một loạt mẫu trang web đáp ứng mà bạn có thể sử dụng - miễn phí!

Web hosting

Lưu trữ trang web của riêng bạn và chia sẻ nó với mọi người với Example.com.vn Spaces

Tạo một máy chủ

Tạo máy chủ của riêng bạn bằng Python, PHP, React.js, Node.js, Java, C#, v.v.

Làm thế nào để

Bộ sưu tập lớn các đoạn mã cho HTML, CSS và JavaScript

Khung CSS

Xây dựng các trang web nhanh và phản hồi bằng cách sử dụng khung W3.CSS miễn phí của chúng tôi

Thống kê trình duyệt

Đọc xu hướng dài hạn của việc sử dụng trình duyệt

Tốc độ gõ

Kiểm tra tốc độ đánh máy của bạn

Đào tạo AWS

Tìm hiểu dịch vụ web của Amazon

Bộ chọn màu

Sử dụng công cụ chọn màu của chúng tôi để tìm các màu RGB, HEX và HSL khác nhau. Bánh xe màu hình tròn thể hiện sự chuyển màu trong quang phổ

Trò chơi mã

Trò chơi mã hóa W3Schools! Giúp linh miêu thu thập nón thông Logo Lynx

Đặt mục tiêu

Nhận hành trình học tập được cá nhân hóa dựa trên các kỹ năng và mục tiêu hiện tại của bạn

Bản tin

Tham gia bản tin của chúng tôi và có quyền truy cập vào nội dung độc quyền mỗi tháng

Việc làm

Thuê những tài năng công nghệ hàng đầu. Hợp lý hóa quy trình tuyển dụng của bạn để có đội ngũ phù hợp hoàn hảo

Lớp học

Hãy liên hệ để sử dụng Example.com.vn Plus và các chứng chỉ với tư cách là một tổ chức giáo dục

×
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP CÁCH W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS AN NINH MẠNG DỮ LIỆU KHOA HỌC

Hướng dẫn DSA

DSA TRANG CHỦ DSA Giới thiệu Thuật toán đơn giản DSA

Mảng

Mảng DSA Sắp xếp bong bóng DSA Sắp xếp lựa chọn DSA Sắp xếp chèn DSA Sắp xếp nhanh DSA Sắp xếp đếm DSA Sắp xếp cơ số DSA Sắp xếp hợp nhất DSA Tìm kiếm tuyến tính DSA Tìm kiếm nhị phân DSA

Danh sách liên kết

Danh sách liên kết DSA Danh sách liên kết DSA trong bộ nhớ Danh sách liên kết DSA Các loại Danh sách liên kết Hoạt động

Ngăn xếp & hàng đợi

Ngăn xếp DSA Hàng đợi DSA

Bảng băm

Bảng băm DSA Bộ hàm băm DSA Bản đồ hàm băm DSA

Cây

Cây DSA Cây nhị phân DSA DSA Traversal đặt hàng trước DSA Traversal theo thứ tự DSA Traversal DSA sau thực hiện mảng DSA Cây tìm kiếm nhị phân DSA Cây AVL DSA

Đồ thị

Đồ thị DSA Thực hiện đồ thị Đồ thị DSA Phát hiện chu trình DSA truyền tải

Con đường ngắn nhất

Đường đi ngắn nhất DSA DSA Bellman-Ford của DSA Dijkstra

Cây bao trùm tối thiểu

Cây khung tối thiểu DSA Prim's DSA Kruskal's

Lưu lượng cực đại

DSA Lưu lượng tối đa DSA Ford-Fulkerson DSA Edmonds-Karp

Độ phức tạp thời gian

Giới thiệu Sắp xếp bong bóng Lựa chọn Sắp xếp Chèn Sắp xếp Sắp xếp nhanh Đếm Sắp xếp Cơ số Sắp xếp Hợp nhất Sắp xếp Tìm kiếm tuyến tính Tìm kiếm nhị phân

Tham chiếu DSA

Thuật toán Euclide DSA Thuật toán tham lam DSA Ghi nhớ DSA DSA Người bán hàng du lịch

Ví dụ về DSA

Ví dụ về DSA Bài tập DSA Câu hỏi DSA Chứng chỉ DSA

Cây nhị phân DSA


Cây nhị phân

Cây nhị phân là một loại cấu trúc dữ liệu cây trong đó mỗi nút có thể có tối đa hai nút con, một nút con bên trái và một nút con bên phải.

Hạn chế này, một nút có thể có tối đa hai nút con, mang lại cho chúng ta nhiều lợi ích:

  • Các thuật toán như duyệt ngang, tìm kiếm, chèn và xóa trở nên dễ hiểu, dễ triển khai và chạy nhanh hơn.
  • Việc sắp xếp dữ liệu trong Cây tìm kiếm nhị phân (BST) giúp việc tìm kiếm trở nên rất hiệu quả.
  • Việc cân bằng cây sẽ dễ thực hiện hơn với số lượng nút con hạn chế, chẳng hạn như sử dụng Cây nhị phân AVL.
  • Cây nhị phân có thể được biểu diễn dưới dạng mảng, làm cho cây có hiệu quả bộ nhớ cao hơn.

Sử dụng hình ảnh động bên dưới để xem Cây nhị phân trông như thế nào và chúng tôi sử dụng những từ nào để mô tả nó.

R MỘT B C D E F G

Nút cha hoặc nút bên trong trong Cây nhị phân là nút có một hoặc hai nút con .

Nút con bên trái là nút con ở bên trái.

Nút con bên phải là nút con ở bên phải.

Chiều cao của cây là số cạnh tối đa tính từ nút gốc đến nút lá.


Cây nhị phân so với mảng và danh sách liên kết

Lợi ích của cây nhị phân so với mảng và danh sách liên kết:

  • Mảng rất nhanh khi bạn muốn truy cập trực tiếp vào một phần tử, chẳng hạn như phần tử số 700 trong một mảng gồm 1000 phần tử chẳng hạn. Nhưng việc chèn và xóa các phần tử yêu cầu các phần tử khác phải dịch chuyển trong bộ nhớ để nhường chỗ cho phần tử mới hoặc thay thế các phần tử đã xóa và điều đó rất tốn thời gian.
  • Danh sách liên kết rất nhanh khi chèn hoặc xóa các nút, không cần dịch chuyển bộ nhớ, nhưng để truy cập một phần tử bên trong danh sách, danh sách phải được duyệt qua và điều đó cần có thời gian.
  • Cây nhị phân , chẳng hạn như Cây tìm kiếm nhị phân và Cây AVL, rất tuyệt vời so với Mảng và Danh sách liên kết vì chúng CẢ HAI nhanh khi truy cập một nút, VÀ nhanh khi xóa hoặc chèn một nút mà không cần thay đổi bộ nhớ.

Chúng ta sẽ xem xét kỹ hơn cách hoạt động của Cây tìm kiếm nhị phân (BST) và Cây AVL trên hai trang tiếp theo, nhưng trước tiên hãy xem cách triển khai Cây nhị phân và cách duyệt qua nó.


Các loại cây nhị phân

Có nhiều biến thể hoặc loại khác nhau của Cây nhị phân đáng để thảo luận để hiểu rõ hơn về cách cấu trúc Cây nhị phân.

Các loại Cây nhị phân khác nhau cũng đáng được đề cập bây giờ vì những từ và khái niệm này sẽ được sử dụng sau trong hướng dẫn.

Dưới đây là những giải thích ngắn gọn về các loại cấu trúc Cây nhị phân khác nhau và bên dưới phần giải thích là các hình vẽ của các loại cấu trúc này để làm cho nó dễ hiểu nhất có thể.

Cây nhị phân cân bằng có chênh lệch tối đa 1 giữa chiều cao cây con bên trái và bên phải của nó đối với mỗi nút trong cây.

Cây nhị phân hoàn chỉnh có tất cả các cấp có đầy đủ các nút, ngoại trừ cấp cuối cùng, cũng có thể đầy hoặc được điền từ trái sang phải. Các thuộc tính của Cây nhị phân hoàn chỉnh có nghĩa là nó cũng được cân bằng.

Cây nhị phân đầy đủ là một loại cây trong đó mỗi nút có 0 hoặc 2 nút con.

Cây nhị phân hoàn hảo có tất cả các nút lá ở cùng một cấp độ, có nghĩa là tất cả các cấp độ đều có đầy đủ các nút và tất cả các nút bên trong đều có hai nút con. Các thuộc tính của Cây nhị phân hoàn hảo có nghĩa là nó cũng đầy đủ, cân bằng và đầy đủ.

11 7 15 3 9 13 19 18
Cân bằng
11 7 15 3 9 13 19 2 4 số 8
Hoàn thiện và cân bằng
11 7 15 13 19 12 14
Đầy
11 7 15 3 13 19 9
Hoàn hảo, đầy đủ, cân bằng và đầy đủ

Thực hiện cây nhị phân

Hãy triển khai Cây nhị phân này:

R MỘT B C D E F G

Cây nhị phân ở trên có thể được triển khai giống như chúng tôi đã triển khai Danh sách liên kết đơn , ngoại trừ việc thay vì liên kết từng nút với một nút tiếp theo, chúng tôi tạo một cấu trúc trong đó mỗi nút có thể được liên kết với cả nút con trái và phải của nó.

Đây là cách Cây nhị phân có thể được triển khai:

Ví dụ

Trăn:

 class TreeNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

root = TreeNode('R')
nodeA = TreeNode('A')
nodeB = TreeNode('B')
nodeC = TreeNode('C')
nodeD = TreeNode('D')
nodeE = TreeNode('E')
nodeF = TreeNode('F')
nodeG = TreeNode('G')

root.left = nodeA
root.right = nodeB

nodeA.left = nodeC
nodeA.right = nodeD

nodeB.left = nodeE
nodeB.right = nodeF

nodeF.left = nodeG

# Test
print("root.right.left.data:", root.right.left.data)
Chạy ví dụ »

Truyền tải cây nhị phân

Đi qua Cây bằng cách truy cập từng nút, từng nút một, được gọi là truyền tải.

Vì Mảng và Danh sách liên kết là các cấu trúc dữ liệu tuyến tính nên chỉ có một cách rõ ràng để duyệt qua các cấu trúc này: bắt đầu từ phần tử hoặc nút đầu tiên và tiếp tục truy cập phần tiếp theo cho đến khi bạn đã truy cập tất cả.

Nhưng vì Cây có thể phân nhánh theo các hướng khác nhau (phi tuyến tính) nên có nhiều cách khác nhau để đi qua Cây.

Có hai loại phương pháp duyệt cây chính:

Tìm kiếm theo chiều rộng đầu tiên (BFS) là khi các nút ở cùng cấp độ được truy cập trước khi chuyển sang cấp độ tiếp theo trong cây. Điều này có nghĩa là cây được khám phá theo hướng nghiêng hơn.

Tìm kiếm theo chiều sâu (DFS) là khi quá trình duyệt di chuyển xuống cây đến tận các nút lá, khám phá từng nhánh cây theo hướng đi xuống.

Có ba loại truyền tải DFS khác nhau:

Ba lần duyệt tìm kiếm theo chiều sâu đầu tiên này được mô tả chi tiết ở các trang tiếp theo.


Bài tập DSA

Kiểm tra bản thân bằng các bài tập

Bài tập:

Trong cấu trúc dữ liệu Cây nhị phân, giống như cấu trúc bên dưới:

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

Mối quan hệ giữa nút B với nút E và F là gì?

Nút E là của B nút con, 
và nút F là của B nút con.

Bắt đầu bài tập



×

Liên hệ bán hàng

Nếu bạn muốn sử dụng dịch vụ của Example.com.vn với tư cách là một tổ chức giáo dục, nhóm hoặc doanh nghiệp, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Báo cáo lỗi

Nếu bạn muốn báo cáo lỗi hoặc nếu bạn muốn đưa ra đề xuất, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Example.com.vn được tối ưu hóa cho việc học tập và đào tạo. Các ví dụ có thể được đơn giản hóa để cải thiện khả năng đọc và học. Các hướng dẫn, tài liệu tham khảo và ví dụ liên tục được xem xét để tránh sai sót, nhưng chúng tôi không thể đảm bảo tính chính xác hoàn toàn của mọi nội dung. Khi sử dụng W3Schools, bạn đồng ý đã đọc và chấp nhận các điều khoản sử dụng , chính sách cookie và quyền riêng tư của chúng tôi.

Bản quyền 1999-2024 của Refsnes Data. Đã đăng ký Bản quyền. Example.com.vn được cung cấp bởi W3.CSS .