Sự khác biệt giữa cây nhị phân và cây tìm kiếm nhị phân


Câu trả lời:


566

Cây nhị phân: Cây nơi mỗi nút có tối đa hai lá

  1
 / \
2   3

Cây tìm kiếm nhị phân: Được sử dụng để tìm kiếm . Cây nhị phân trong đó con trái chỉ chứa các nút có giá trị nhỏ hơn nút cha và ở đó con phải chỉ chứa các nút có giá trị lớn hơn hoặc bằng cha mẹ.

  2
 / \
1   3

14
@pete: Đó là một khái niệm, bạn sẽ không bao giờ thực sự tạo ra một thứ hoàn toàn không bị ràng buộc. Tuy nhiên, có rất nhiều cây nhị phân không tìm kiếm đặc biệt theo một cách khác, ví dụ như đống nhị phân.
dùng541686

19
Các cây nhị phân @pete không nhất thiết phải chứa dữ liệu so sánh, nhiều cây nhị phân (không tìm kiếm) được sử dụng để phân tích biểu thức đại số, cây nhị phân là hoàn hảo để viết một trình phân tích cú pháp ký hiệu, bằng cách đặt toán tử làm nút (s) và các giá trị số như những chiếc lá
JBoy 27/05/2015

2
@JBoy: Mặc dù vậy, chúng sẽ không trở thành cây nhị phân trong trường hợp đó. (ví dụ: các nhà khai thác đơn phương không thể có hai con.) Tôi thực sự không thể nghĩ ra trường hợp sử dụng thực tế cho các cây nhị phân không bị ràng buộc, đó là lý do tại sao tôi đưa ra nhận xét đó.
dùng541686

2
Tuyệt vời và đơn giản. +1 cho ví dụ trực quan :)
Andrei Konstantinov

@Mehrdad Một cây nhị phân có một hoặc hai con trên mỗi nút. Cây biểu hiện là một ví dụ hoàn hảo. Cây tìm kiếm nhị phân cũng có một hoặc hai con trên mỗi nút, trừ khi nó đầy đủ, điều này chỉ có thể xảy ra với một số phần tử nhất định.
Hầu tước Lorne

56

Cây nhị phân là một dạng cây chuyên dụng có hai con (con trái và con phải). Nó chỉ đơn giản là biểu diễn dữ liệu trong cấu trúc Tree

Cây tìm kiếm nhị phân (BST) là một loại cây nhị phân đặc biệt tuân theo các điều kiện sau:

  1. nút con bên trái nhỏ hơn nút cha của nó
  2. nút con phải lớn hơn nút cha của nó

23
Những điều kiện này là không đủ. Toàn bộ cây con bên trái phải không chứa khóa nào nhỏ hơn cha mẹ và toàn bộ cây con bên phải phải chứa các nút lớn hơn.
Hầu tước Lorne

1
@EJP bạn có thể giải thích ý kiến ​​của bạn được không? Bạn có ý nghĩa gì bởi toàn bộ cây con? bạn có nghĩa là tất cả các giá trị của cây con nên ít hơn gốc ở bên trái? và tất cả các giá trị nên lớn hơn giá trị gốc ở phía bên phải?
Asif Mushtaq

Theo liên kết thứ hai, đọc phần "Xác minh" và nó sẽ rõ ràng.
Cướp

38

Cây nhị phân được tạo thành từ các nút, trong đó mỗi nút chứa con trỏ "trái", con trỏ "phải" và phần tử dữ liệu. Con trỏ "root" trỏ đến nút trên cùng trong cây. Các con trỏ bên trái và bên phải đệ quy trỏ đến các "cây con" nhỏ hơn ở hai bên. Một con trỏ null đại diện cho cây nhị phân không có phần tử - cây trống. Định nghĩa đệ quy chính thức là: cây nhị phân hoặc trống (được biểu thị bằng con trỏ null) hoặc được tạo bởi một nút duy nhất, trong đó con trỏ bên trái và bên phải (định nghĩa đệ quy phía trước) mỗi điểm đến cây nhị phân.

Cây tìm kiếm nhị phân (BST) hoặc "cây nhị phân có thứ tự" là một loại cây nhị phân trong đó các nút được sắp xếp theo thứ tự: đối với mỗi nút, tất cả các phần tử trong cây con bên trái của nó ít hơn cho nút (<) và tất cả các phần tử trong cây con bên phải của nó lớn hơn nút (>).

    5
   / \
  3   6 
 / \   \
1   4   9    

Cây được hiển thị ở trên là cây tìm kiếm nhị phân - nút "gốc" là 5 và các nút cây con bên trái của nó (1, 3, 4) là <5 và các nút cây con bên phải của nó (6, 9) là> 5. Theo cách đệ quy, mỗi cây con cũng phải tuân theo ràng buộc của cây tìm kiếm nhị phân: trong cây con (1, 3, 4), 3 là gốc, 1 <3 và 4> 3.

Coi chừng từ ngữ chính xác trong các vấn đề - một "cây tìm kiếm nhị phân" khác với "cây nhị phân".


@GabrielStaples Thêm cấu trúc cây.
Boraur Gaurav

14

Như mọi người ở trên đã giải thích về sự khác biệt giữa cây nhị phân và cây tìm kiếm nhị phân, tôi chỉ thêm cách kiểm tra xem cây nhị phân đã cho có phải là cây tìm kiếm nhị phân hay không.

boolean b = new Sample().isBinarySearchTree(n1, Integer.MIN_VALUE, Integer.MAX_VALUE);
.......
.......
.......
public boolean isBinarySearchTree(TreeNode node, int min, int max)
{

    if(node == null)
    {
        return true;
    }

    boolean left = isBinarySearchTree(node.getLeft(), min, node.getValue());
    boolean right = isBinarySearchTree(node.getRight(), node.getValue(), max);

    return left && right && (node.getValue()<max) && (node.getValue()>=min);

}

Hy vọng nó sẽ giúp bạn. Xin lỗi nếu tôi chuyển hướng từ chủ đề vì tôi cảm thấy đáng để đề cập đến vấn đề này ở đây.


1
Hoặc cây con bên trái hoặc bên phải có thể trống. Mã của bạn không xử lý trường hợp đó một cách chính xác.
Hầu tước Lorne

11

Cây nhị phân là viết tắt của cấu trúc dữ liệu được tạo thành từ các nút chỉ có thể có hai tham chiếu con .

Mặt khác, Cây tìm kiếm nhị phân ( BST ) là một dạng cấu trúc dữ liệu Binary Tree đặc biệt trong đó mỗi nút có giá trị tương đương và các con có giá trị nhỏ hơn được gắn vào các con có giá trị lớn hơn và bên trái được gắn vào bên phải.

Do đó, tất cả các BST đều là Cây nhị phân, tuy nhiên chỉ một số Cây nhị phân cũng có thể là BST . Thông báo rằng BST là tập con của Cây nhị phân .

Vì vậy, Cây nhị phân có cấu trúc dữ liệu chung hơn Cây tìm kiếm nhị phân . Và bạn cũng phải thông báo rằng Cây tìm kiếm nhị phân là một cây được sắp xếp trong khi không có bộ quy tắc nào cho Cây nhị phân chung .

Cây nhị phân

Một Binary Treetrong đó là không một BST;

         5
       /   \
      /     \
     9       2
    / \     / \
  15   17  19  21

Cây tìm kiếm nhị phân (cây được sắp xếp)

Một Binary Search Tree cũng là một cây nhị phân ;

         50
       /    \
      /      \
     25      75
    /  \    /  \
  20    30 70   80

Thuộc tính nhị phân cây tìm kiếm

Cũng thông báo rằng cho bất kỳ nút cha trong BST ;

  • Tất cả các nút bên trái có giá trị nhỏ hơn giá trị của nút cha. Trong ví dụ trên, các nút có giá trị {20, 25, 30} đều nằm ở bên trái ( con cháu bên trái ) là 50, nhỏ hơn 50.

  • Tất cả các nút bên phải có giá trị lớn hơn giá trị của nút cha. Trong ví dụ trên, các nút có giá trị {70, 75, 80} đều nằm ở bên phải ( con cháu bên phải ) là 50, lớn hơn 50.

Không có quy tắc nào như vậy đối với Binary Tree Node. Quy tắc duy nhất cho Binary Tree Node là có hai con để nó tự giải thích rằng tại sao gọi là nhị phân .


Chúng ta có thể thực hiện Cây nhị phân đơn giản không? Có bất kỳ thực hiện có sẵn? và công dụng của cây này là gì?
Asif Mushtaq

@UnKnown Bạn có thể sử dụng Cây tìm kiếm nhị phân để sắp xếp và tìm kiếm. Bạn có thể tìm thấy việc triển khai Cây tìm kiếm nhị phân tại đây: github.com/bzdgn/data-strucenses-in-java/blob/master/src/
Lỗi

Tôi biết về điều đó nhưng có sự tồn tại của Cây đơn giản hay Cây nhị phân đơn giản không? hoặc bất kỳ thực hiện của Cây nhị phân đơn giản?
Asif Mushtaq

Không có điểm nào để sử dụng nhưng bạn có thể thêm các thể hiện Node tùy ý vào thư mục gốc và cho trẻ em.
Levent Divilioglu

10

Cây tìm kiếm nhị phân là một loại cây nhị phân đặc biệt thể hiện thuộc tính sau: đối với bất kỳ nút n nào, mọi giá trị của nút con cháu trong cây con bên trái của n đều nhỏ hơn giá trị của n và mọi giá trị của nút con cháu trong cây con bên phải là lớn hơn giá trị của n.


8

Cây nhị phân

Cây nhị phân có thể là bất cứ thứ gì có 2 con và 1 bố mẹ. Nó có thể được triển khai dưới dạng danh sách hoặc mảng được liên kết hoặc với API tùy chỉnh của bạn. Khi bạn bắt đầu thêm các quy tắc cụ thể hơn vào nó, nó sẽ trở thành cây chuyên dụng hơn . Thực hiện phổ biến nhất được biết đến là, thêm các nút nhỏ hơn ở bên trái và lớn hơn ở bên phải.

Ví dụ, cây nhị phân có nhãn có kích thước 9 và chiều cao 3, với nút gốc có giá trị là 2. Cây không cân bằng và không được sắp xếp . https://en.wikipedia.org/wiki/Binary_tree

nhập mô tả hình ảnh ở đây

Ví dụ, trong cây bên trái, A có 6 con {B, C, D, E, F, G}. Nó có thể được chuyển đổi thành cây nhị phân ở bên phải.

nhập mô tả hình ảnh ở đây

Tìm kiếm nhị phân

Tìm kiếm nhị phân là kỹ thuật / thuật toán được sử dụng để tìm mục cụ thể trên chuỗi nút. Tìm kiếm nhị phân hoạt động trên các mảng được sắp xếp .

Tìm kiếm nhị phân so sánh giá trị đích với phần tử ở giữa của mảng; nếu chúng không bằng nhau, một nửa trong đó mục tiêu không thể nói dối bị loại bỏ và tìm kiếm tiếp tục ở nửa còn lại cho đến khi thành công hoặc nửa còn lại trống. https://en.wikipedia.org/wiki/Binary_search_alacticm

nhập mô tả hình ảnh ở đây

Một cây đại diện cho tìm kiếm nhị phân . Mảng đang được tìm kiếm ở đây là [20, 30, 40, 50, 90, 100] và giá trị đích là 40.

nhập mô tả hình ảnh ở đây

Cây tìm kiếm nhị phân

Đây là một trong những triển khai của cây nhị phân. Đây là chuyên ngành để tìm kiếm .

Cấu trúc dữ liệu cây tìm kiếm nhị phân và cây B dựa trên tìm kiếm nhị phân .

Cây tìm kiếm nhị phân (BST), đôi khi được gọi là cây nhị phân được sắp xếp hoặc sắp xếp, là một loại thùng chứa cụ thể : cấu trúc dữ liệu lưu trữ "vật phẩm" (như số, tên, v.v.) trong bộ nhớ. https://en.wikipedia.org/wiki/Binary_search_tree

Cây tìm kiếm nhị phân có kích thước 9 và độ sâu 3, với 8 ở gốc. Những chiếc lá không được vẽ.

nhập mô tả hình ảnh ở đây

Và cuối cùng là lược đồ tuyệt vời để so sánh hiệu suất của các cấu trúc dữ liệu và thuật toán nổi tiếng được áp dụng:

nhập mô tả hình ảnh ở đây

Hình ảnh được lấy từ Thuật toán (Phiên bản thứ 4)


4

Cây nhị phân là một cây có con không bao giờ nhiều hơn hai. Cây tìm kiếm nhị phân tuân theo bất biến rằng con trái phải có giá trị nhỏ hơn khóa của nút gốc, trong khi con phải sẽ có giá trị lớn hơn khóa của nút gốc.


4
  • Cây tìm kiếm nhị phân: khi truyền tải thứ tự được thực hiện trên cây nhị phân, bạn nhận được các giá trị được sắp xếp của các mục được chèn
  • Cây nhị phân: không tìm thấy thứ tự sắp xếp nào trong bất kỳ loại giao dịch nào

Không có thứ tự sắp xếp cần được tìm thấy. Cây tìm kiếm nhị phân cũng là cây nhị phân. Họ không phải là loại trừ lẫn nhau. BST là tập con thích hợp của BT.
Hầu tước Lorne

3

Để kiểm tra xem có hay không Cây nhị phân cụ thể là Cây tìm kiếm nhị phân ở đây là Cách tiếp cận thay thế.

Traverse Tree In Inorder Fashion (ví dụ: Left Left -> Parent -> Right Child), Lưu trữ dữ liệu nút được chuyển đổi trong một biến tạm thời cho phép nói tạm thời , ngay trước khi lưu trữ vào temp , Kiểm tra dữ liệu của Node hiện tại có cao hơn trước hay không . Sau đó, chỉ cần phá vỡ nó, Cây không phải là Cây tìm kiếm nhị phân khác đi qua cho đến khi kết thúc.

Dưới đây là một ví dụ với Java:

public static boolean isBinarySearchTree(Tree root)
{
    if(root==null)
        return false;

    isBinarySearchTree(root.left);
    if(tree.data<temp)
        return false;
    else
        temp=tree.data;
    isBinarySearchTree(root.right);
    return true;
}

Duy trì biến tạm thời bên ngoài


Hoặc cây con có thể là null. Thuật toán của bạn không xử lý trường hợp đó một cách chính xác.
Hầu tước Lorne

1

Trong cây tìm kiếm nhị phân, tất cả các nút được sắp xếp theo một thứ tự cụ thể - các nút ở bên trái của nút gốc có giá trị nhỏ hơn gốc của nó và tất cả các nút ở bên phải của nút có giá trị lớn hơn giá trị của nguồn gốc.


0

Một cây có thể được gọi là cây nhị phân khi và chỉ khi số lượng con tối đa của bất kỳ nút nào là hai.

Một cây có thể được gọi là cây tìm kiếm nhị phân khi và chỉ khi số lượng con tối đa của bất kỳ nút nào là hai và con trái luôn nhỏ hơn con phải.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.