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

Giá trị của khóa của cây con bên phải lớn hơn hoặc bằng giá trị của khóa của nút cha (gốc) của nó

Do đó, BST chia tất cả các cây con của nó thành hai phân đoạn;

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

đại diện

BST là tập hợp các nút được sắp xếp theo cách chúng duy trì các thuộc tính BST. Mỗi nút có một khóa và một giá trị liên quan. Trong khi tìm kiếm, khóa mong muốn được so sánh với các khóa trong BST và nếu tìm thấy, giá trị được liên kết sẽ được truy xuất

Sau đây là hình ảnh đại diện của BST −

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

Chúng tôi quan sát thấy rằng khóa nút gốc (27) có tất cả các khóa có giá trị thấp hơn trên cây con bên trái và các khóa có giá trị cao hơn trên cây con bên phải

Hoạt động cơ bản

Sau đây là các hoạt động cơ bản của cây -

  • Tìm kiếm - Tìm kiếm một phần tử trong cây

  • Chèn - Chèn một phần tử vào cây

  • Pre-order Traversal – Duyệt qua một cây theo cách đặt hàng trước

  • In-order Traversal − Duyệt cây theo thứ tự

  • Traversal theo thứ tự sau - Duyệt qua một cây theo cách thức sau khi đặt hàng

Nút

Xác định một nút có một số dữ liệu, tham chiếu đến các nút con bên trái và bên phải của nó

struct node {
   int data;   
   struct node *leftChild;
   struct node *rightChild;
};

Hoạt động tìm kiếm

Bất cứ khi nào một phần tử được tìm kiếm, hãy bắt đầu tìm kiếm từ nút gốc. Sau đó, nếu dữ liệu nhỏ hơn giá trị chính, hãy tìm kiếm phần tử trong cây con bên trái. Mặt khác, tìm kiếm phần tử trong cây con bên phải. Thực hiện theo cùng một thuật toán cho mỗi nút

thuật toán

struct node* search(int data){
   struct node *current = root;
   printf("Visiting elements: ");
	
   while(current->data != data){
	
      if(current != NULL) {
         printf("%d ",current->data);
			
         //go to left tree
         if(current->data > data){
            current = current->leftChild;
         }  //else go to right tree
         else {                
            current = current->rightChild;
         }
			
         //not found
         if(current == NULL){
            return NULL;
         }
      }			
   }
   
   return current;
}

Thao tác chèn

Bất cứ khi nào một phần tử được chèn vào, trước tiên hãy xác định vị trí thích hợp của nó. Bắt đầu tìm kiếm từ nút gốc, sau đó nếu dữ liệu nhỏ hơn giá trị khóa, hãy tìm vị trí trống trong cây con bên trái và chèn dữ liệu. Nếu không, hãy tìm vị trí trống trong cây con bên phải và chèn dữ liệu

Cây là một cấu trúc dữ liệu phi tuyến tính trong đó dữ liệu được lưu trữ phi tuyến tính. Một cây được sử dụng để biểu diễn dữ liệu ở dạng phân cấp. Nó có một tập hợp các đối tượng lưu trữ dữ liệu vào nó được gọi là các nút

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

Hình ảnh trên đại diện cho một cây trong đó bốn nút được kết nối theo cấu trúc phân cấp. Mỗi nút chứa một số dữ liệu số nguyên và địa chỉ của các nút con của nó

Bây giờ, trước khi tìm hiểu về cây tìm kiếm nhị phân, chúng ta hãy xem cây nhị phân và biểu diễn của nó

Theo dõi ngay. Cấu trúc dữ liệu trong C Newsletter. Chủ đề quan trọng Bản tin

quảng cáo

quảng cáo

Cây nhị phân là gì?

Cây nhị phân là loại cây mà mỗi nút chứa nhiều nhất hai con. Một nút chứa địa chỉ của nút con bên trái và bên phải trong biểu diễn danh sách liên kết của cây nhị phân

Nếu một nút không chứa một trong hai nút con, thì trường của nút đó sẽ là NULL. Nếu không có nút con nào cho nút đó thì nó được gọi là nút Lá

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

Nhận Giấy khen miễn phí về Cấu trúc dữ liệu ngay bây giờ

Cây tìm kiếm nhị phân là gì?

Cây tìm kiếm nhị phân là một cây đặc biệt trong đó một số thứ tự được tuân theo. Mỗi nút cha có nhiều nhất hai nút con, trong đó nút con bên trái có giá trị thấp hơn trong khi nút con bên phải có giá trị cao hơn nút cha của chúng. Quy tắc này được áp dụng cho tất cả các cây con bên trái và bên phải

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

Giải pháp vấn đề

Chúng tôi sẽ triển khai cây tìm kiếm nhị phân bằng danh sách liên kết kép. Danh sách liên kết kép chứa địa chỉ của con trái và con phải và dữ liệu của nút. Con trỏ bên trái của nút trỏ đến các nút con bên trái và con trỏ bên phải trỏ đến các nút con bên phải

quảng cáo

Đây là biểu diễn của một nút sử dụng danh sách liên kết kép

struct node
{
	int data;
	struct node* left;
struct node* right;
};

Biểu diễn Danh sách liên kết kép của nút BST

trái*dữ liệu phải*

Chương trình/Mã nguồn

Đây là mã nguồn của chương trình C để thực hiện các hoạt động Cây tìm kiếm nhị phân. Chương trình C được biên dịch thành công và chạy trên hệ thống Linux. Đầu ra chương trình cũng được hiển thị bên dưới

quảng cáo

  1. /*
  2. * C program to implement the Binary Search Tree 
  3. */
  4. #include <stdio.h>
  5. ________số 8
  6.  
  7. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    0
  8. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    1
  9. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  10. /*
    0
  11. /*
    1
  12. /*
    2
  13. /*
    3
  14.  
  15. /*
    5
  16. /*
    6
  17.  
  18. /*
    8
  19. /*
    9
  20. * C program to implement the Binary Search Tree 
    0
  21. * C program to implement the Binary Search Tree 
    1
  22. * C program to implement the Binary Search Tree 
    2
  23. * C program to implement the Binary Search Tree 
    3
  24. * C program to implement the Binary Search Tree 
    4
  25. * C program to implement the Binary Search Tree 
    5
  26. * C program to implement the Binary Search Tree 
    6
  27. * C program to implement the Binary Search Tree 
    7
  28. * C program to implement the Binary Search Tree 
    8
  29.  
  30. */
    0
  31. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  32. */
    2
  33. */
    3
  34. /*
    0
  35. */
    5
  36.  
  37. */
    7
  38. */
    8
  39. */
    9
  40. #include <stdio.h>
    0
  41. #include <stdio.h>
    1
  42. #include <stdio.h>
    2
  43. #include <stdio.h>
    3
  44. #include <stdio.h>
    4
  45. #include <stdio.h>
    5
  46. #include <stdio.h>
    6
  47. #include <stdio.h>
    7
  48. #include <stdio.h>
    8
  49. #include <stdio.h>
    9
  50.  
  51. #include <stdlib.h>
    1
  52. #include <stdlib.h>
    2
  53. #include <stdlib.h>
    3
  54.  
  55. #include <stdlib.h>
    5
  56. #include <stdlib.h>
    6
  57. #include <stdlib.h>
    7
  58. #include <stdlib.h>
    8
  59. #include <stdlib.h>
    9
  60.  
    0
  61.  
  62.  
    2
  63. #include <stdlib.h>
    8
  64.  
    4
  65.  
    0
  66.  
  67.  
    7
  68. #include <stdlib.h>
    8
  69.  
    9
  70. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    00
  71. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    01
  72. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    02
  73. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    03
  74. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    00
  75. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    05
  76. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    02
  77.  
    0
  78.  
  79. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    09
  80. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    10
  81. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    11
  82. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    00
  83. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    13
  84. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    02
  85.  
    0
  86.  
  87. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    17
  88. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    18
  89. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    11
  90. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    00
  91. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    21
  92. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    02
  93.  
    0
  94.  
  95. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    25
  96. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    26
  97.  
    0
  98.  
  99. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    29
  100. /*
    00
  101.  
    0
  102.  
  103. /*
    03
  104. /*
    04
  105.  
    0
  106.  
  107. /*
    07
  108. /*
    08
  109.  
    0
  110.  
  111. /*
    11
  112. /*
    12
  113.  
    0
  114. /*
    14
  115.  
  116. /*
    16
  117. /*
    17
  118. /*
    18
  119. /*
    19
  120.  
  121. /*
    21
  122. /*
    22
  123.  
  124. /*
    24
  125. /*
    25
  126. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  127. /*
    27
  128.  
  129. /*
    29
  130. */
    8
  131. /*
    31
  132. /*
    32
  133. /*
    19
  134.  
  135. /*
    35
  136. /*
    36
  137. /*
    37
  138.  
  139. /*
    39
  140. /*
    22
  141.  
  142. /*
    42
  143. /*
    43
  144. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  145. /*
    45
  146.  
  147. /*
    47
  148. */
    8
  149. /*
    49
  150. /*
    50
  151. #include <stdlib.h>
    6
  152. /*
    52
  153. /*
    53
  154. /*
    54
  155. /*
    14
  156.  
  157. /*
    57
  158. /*
    58
  159.  
  160. /*
    60
  161. /*
    61
  162. #include <stdlib.h>
    6
  163. /*
    63
  164. /*
    64
  165. /*
    65
  166. /*
    66
  167. /*
    67
  168. /*
    68
  169. /*
    65
  170. /*
    70
  171. /*
    67
  172. /*
    14
  173.  
  174. /*
    74
  175. /*
    75
  176. #include <stdlib.h>
    6
  177. /*
    77
  178. /*
    14
  179. /*
    79
  180. #include <stdlib.h>
    6
  181. /*
    81
  182. /*
    14
  183.  
  184. /*
    84
  185. /*
    19
  186. /*
    22
  187.  
  188. /*
    88
  189. /*
    89
  190. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  191. /*
    91
  192. */
    8
  193. /*
    93
  194. /*
    19
  195. /*
    95
  196. */
    8
  197. /*
    97
  198. /*
    19
  199. /*
    99
  200. */
    8
  201. * C program to implement the Binary Search Tree 
    01
  202. /*
    19
  203. * C program to implement the Binary Search Tree 
    03
  204. */
    8
  205. * C program to implement the Binary Search Tree 
    05
  206. #include <stdlib.h>
    6
  207. * C program to implement the Binary Search Tree 
    07
  208. * C program to implement the Binary Search Tree 
    08
  209. * C program to implement the Binary Search Tree 
    09
  210. /*
    14
  211. * C program to implement the Binary Search Tree 
    11
  212. #include <stdlib.h>
    6
  213. * C program to implement the Binary Search Tree 
    13
  214. * C program to implement the Binary Search Tree 
    08
  215. * C program to implement the Binary Search Tree 
    09
  216. /*
    14
  217. * C program to implement the Binary Search Tree 
    17
  218. * C program to implement the Binary Search Tree 
    18
  219. * C program to implement the Binary Search Tree 
    19
  220. /*
    19
  221. * C program to implement the Binary Search Tree 
    21
  222.  
  223. /*
    22
  224.  
  225. * C program to implement the Binary Search Tree 
    25
  226. * C program to implement the Binary Search Tree 
    26
  227. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  228. * C program to implement the Binary Search Tree 
    28
  229.  
  230. * C program to implement the Binary Search Tree 
    30
  231. */
    8
  232. * C program to implement the Binary Search Tree 
    32
  233. #include <stdlib.h>
    6
  234. * C program to implement the Binary Search Tree 
    34
  235. /*
    14
  236. * C program to implement the Binary Search Tree 
    36
  237. #include <stdlib.h>
    6
  238. * C program to implement the Binary Search Tree 
    38
  239. /*
    14
  240. /*
    79
  241. #include <stdlib.h>
    6
  242. * C program to implement the Binary Search Tree 
    42
  243. /*
    14
  244. /*
    19
  245. /*
    21
  246. /*
    22
  247.  
  248. * C program to implement the Binary Search Tree 
    48
  249. * C program to implement the Binary Search Tree 
    49
  250. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  251. * C program to implement the Binary Search Tree 
    51
  252. * C program to implement the Binary Search Tree 
    52
  253. * C program to implement the Binary Search Tree 
    53
  254. * C program to implement the Binary Search Tree 
    54
  255. /*
    19
  256. * C program to implement the Binary Search Tree 
    56
  257. /*
    22
  258.  
  259. * C program to implement the Binary Search Tree 
    59
  260. * C program to implement the Binary Search Tree 
    60
  261. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  262. * C program to implement the Binary Search Tree 
    51
  263. * C program to implement the Binary Search Tree 
    63
  264. */
    8
  265. * C program to implement the Binary Search Tree 
    65
  266. /*
    19
  267. * C program to implement the Binary Search Tree 
    56
  268. /*
    22
  269.  
  270. * C program to implement the Binary Search Tree 
    70
  271. * C program to implement the Binary Search Tree 
    71
  272. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  273. /*
    91
  274. */
    8
  275. * C program to implement the Binary Search Tree 
    75
  276. /*
    19
  277. * C program to implement the Binary Search Tree 
    77
  278. * C program to implement the Binary Search Tree 
    78
  279. * C program to implement the Binary Search Tree 
    79
  280. /*
    22
  281.  
  282. * C program to implement the Binary Search Tree 
    82
  283. * C program to implement the Binary Search Tree 
    83
  284. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  285. /*
    91
  286. */
    8
  287. * C program to implement the Binary Search Tree 
    75
  288. /*
    19
  289. * C program to implement the Binary Search Tree 
    89
  290. * C program to implement the Binary Search Tree 
    90
  291. * C program to implement the Binary Search Tree 
    91
  292. /*
    22
  293.  
  294. * C program to implement the Binary Search Tree 
    94
  295. * C program to implement the Binary Search Tree 
    95
  296. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  297. /*
    91
  298. */
    8
  299. * C program to implement the Binary Search Tree 
    75
  300. /*
    19
  301. */
    01
  302. */
    02
  303. * C program to implement the Binary Search Tree 
    89
  304. /*
    22
  305.  
  306. */
    06
  307. */
    07
  308. struct node {
       int data;   
       struct node *leftChild;
       struct node *rightChild;
    };
    
    2
  309. /*
    0
  310. */
    10
  311. */
    11
  312. */
    12
  313. /*
    22

Giải thích chương trình

Ở đây chúng ta đã thảo luận về các chức năng chính của Cây tìm kiếm nhị phân với sự phức tạp về thời gian và không gian

Chèn một Node mới – phương thức insert()

Để chèn nút mới, chúng ta phải làm theo các bước đã cho

  1. Tìm nút mà nút mới phải được chèn vào và lưu nút đã truy cập vào biến tạm thời
  2. Bây giờ, dữ liệu nút mới sẽ được so sánh với tạm thời
  3. Nếu dữ liệu lớn hơn dữ liệu tạm thời thì hãy chèn nút mới ở bên phải của tạm thời
  4. Nếu dữ liệu nhỏ hơn thì chèn nút mới ở bên trái của tạm thời

Ví dụ. Hãy chèn nút mới 45 vào Cây tìm kiếm nhị phân đã cho. Chúng tôi có các bước sau để chèn nó vào đúng vị trí

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

Độ phức tạp về thời gian.
Trường hợp xấu nhất. O(n)
Khi cây tìm kiếm nhị phân trở thành cây lệch thì chúng ta cần duyệt qua từng nút để độ phức tạp thời gian trở thành O(n), trong đó n là số nút.

Trường hợp tốt nhất và trung bình. O(h)
Nói chung, chúng ta cần duyệt cây đến độ cao h, do đó tổ hợp trở thành O(h), trong đó h là chiều cao của cây.

Độ phức tạp của không gian. O(1)
Không gian không đổi trong phương pháp này vì chúng tôi chỉ sử dụng các biến tạm thời.

Thời gian chạy thử nghiệm

Trong trường hợp này, chúng tôi đang chèn các nút vào cây tìm kiếm nhị phân

*/
14

Xóa một nút – Phương thức xóa ()

Có ba trường hợp xóa nút khỏi cây. Hãy thảo luận về tất cả các trường hợp bằng cách sử dụng các ví dụ được đưa ra dưới đây

trường hợp 1. Xóa nút lá
Để xóa nút lá chúng ta cần duyệt đến nút lá cần thiết rồi xóa nút đó và cập nhật nút gốc.

Ví dụ. Xóa một nút lá 65

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

trường hợp 2. Xóa một nút có một nút con
Xóa nút đã cho đó và thay bằng nút con của nó.

Ví dụ. Xóa nút 25, để xóa nút 25 ta phải cập nhật nút con của nó là nút 65

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

trường hợp 3. Xóa một nút có hai nút con
Trong trường hợp này, hãy tìm nút kế tiếp theo thứ tự của nút mà nó đang xóa. Sao chép nội dung của nút kế tiếp theo thứ tự vào nút. Xóa người kế nhiệm đơn đặt hàng. Đối với trường hợp này, chúng ta cũng có thể sử dụng tiền thân inorder.

Ví dụ. Xóa nút 20 khỏi cây đã cho

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

Độ phức tạp về thời gian.
Trường hợp xấu nhất. O(n)
Trong trường hợp này cây là cây lệch. Vì vậy, chúng ta cần đi qua từng nút.

Trường hợp tốt nhất và trung bình. O(h)
Nói chung, độ phức tạp của thời gian phụ thuộc vào chiều cao(h) của BST.

Độ phức tạp của không gian. O(n)
Trong đó n là số nút trong BST. Trong trường hợp xấu nhất, ngăn xếp cuộc gọi của nút gọi tổng số nút.

Thời gian chạy thử nghiệm

Trong trường hợp này, chúng tôi đang xóa các nút trong cây tìm kiếm nhị phân.
Lưu ý. Dữ liệu trong Cây tìm kiếm nhị phân là {12 15 18 20 25 65}

*/
15

Tìm kiếm một nút – phương thức tìm kiếm ()

Tìm kiếm một nút trong cây tìm kiếm nhị phân thực hiện các bước sau

  1. So sánh dữ liệu nút hiện tại với khóa nếu
    • Nếu khóa được tìm thấy, sau đó trả lại nút
    • Nếu khóa nhỏ hơn dữ liệu nút, hãy di chuyển dòng điện sang nút bên trái và lặp lại bước 1
    • Nếu phím lớn hơn thì di chuyển sang phải và lặp lại bước 1
  2. Nếu không tìm thấy nút thì trả về NULL

Ví dụ. Hãy tìm nút có dữ liệu 15 trong BST đã cho

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

Độ phức tạp về thời gian.
Trường hợp xấu nhất. O(n)
Trong trường hợp xấu nhất, chúng ta phải đi qua từng nút. Ở đây n là số nút trong cây tìm kiếm nhị phân.

Trường hợp tốt nhất và Trường hợp trung bình. O(h)
Trong trường hợp này, độ phức tạp phụ thuộc vào độ cao h của cây tìm kiếm nhị phân.

Độ phức tạp của không gian. O(1)
Không gian không đổi trong phương pháp này vì chúng tôi chỉ sử dụng các biến tạm thời.

Thời gian chạy thử nghiệm

Trong trường hợp này, chúng tôi đang tìm kiếm các nút trong cây tìm kiếm nhị phân.
Lưu ý. Dữ liệu trong Cây tìm kiếm nhị phân là {12 15 18 20 25 65}

*/
16

Traversals của cây tìm kiếm nhị phân

Truyền đơn đặt hàng

Trong quá trình duyệt theo thứ tự, chúng ta phải duyệt theo thứ tự sau

  1. Di chuyển sang trái đến một nút nhất định
  2. in dữ liệu nút
  3. Di chuyển sang phải đến một nút nhất định

Ví dụ. Giao dịch theo thứ tự của cây được đưa ra dưới đây

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

đặt hàng. 12, 15, 18, 20, 25, 65

Độ phức tạp về thời gian. O(n)
Ở đây, n là số nút. Chúng ta phải đi qua từng nút trong BST.

Độ phức tạp của không gian. O(h)
Chiều cao của cây nhị phân tìm kiếm lệch là số nút.

Thời gian chạy thử nghiệm

Trong trường hợp này, chúng tôi thực hiện duyệt theo thứ tự của cây tìm kiếm nhị phân.
Lưu ý. Dữ liệu trong Cây tìm kiếm nhị phân là {12 15 18 20 25 65}

*/
17

Truyền tải đặt hàng trước

Trong quá trình duyệt theo thứ tự trước, chúng ta phải duyệt theo thứ tự sau

  1. In dữ liệu nút
  2. Di chuyển sang trái đến một nút nhất định
  3. Di chuyển sang phải đến một nút nhất định

Ví dụ. Trình duyệt đặt hàng trước của cây tìm kiếm nhị phân được đưa ra dưới đây

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

Đặt hàng trước. 20, 15, 12, 18, 25, 65

Độ phức tạp về thời gian. O(n)
Ở đây, n là số nút. Chúng ta phải đi qua từng nút trong BST.

Độ phức tạp của không gian. O(h)
Chiều cao của cây nhị phân tìm kiếm lệch là số nút.

Thời gian chạy thử nghiệm

Trong trường hợp này, chúng tôi thực hiện duyệt theo thứ tự trước của cây tìm kiếm nhị phân.
Lưu ý. Dữ liệu trong Cây tìm kiếm nhị phân là {12 15 18 20 25 65}

*/
18

Truyền tải sau khi đặt hàng

Trong quá trình duyệt theo thứ tự trước, chúng ta phải duyệt theo thứ tự sau

  1. Di chuyển sang trái đến một nút nhất định
  2. Di chuyển sang phải đến một nút nhất định
  3. In dữ liệu của nút

Ví dụ. Trình duyệt theo thứ tự của cây tìm kiếm nhị phân được đưa ra dưới đây

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

đặt hàng sau. 12, 18, 15, 65, 25, 20

Độ phức tạp về thời gian. O(n)
Ở đây, n là số nút. Chúng ta phải đi qua từng nút trong BST.

Độ phức tạp của không gian. O(h)
Chiều cao của cây nhị phân tìm kiếm lệch là số nút.

Thời gian chạy thử nghiệm

Trong trường hợp này, chúng tôi thực hiện duyệt theo thứ tự sau của cây tìm kiếm nhị phân.
Lưu ý. Dữ liệu trong Cây tìm kiếm nhị phân là {12 15 18 20 25 65}

*/
19

Để thực hành các chương trình về mọi chủ đề trong C, vui lòng truy cập “Ví dụ lập trình trong C”, “Cấu trúc dữ liệu trong C” và “Thuật toán trong C”

Cây tìm kiếm nhị phân trong C là gì?

Cây tìm kiếm nhị phân là cây nhị phân trong đó đối với mọi nút, các giá trị trong cây con bên trái của nó nhỏ hơn giá trị của nút nhỏ hơn nhiều hơn mọi giá trị trong cây con bên trái của nó. . Thao tác tìm kiếm trong cây tìm kiếm nhị phân trở nên đơn giản hơn vì ở đây các phần tử được lưu trữ theo thứ tự đã sắp xếp. . Searching operation in a binary search tree becomes simpler because here elements are stored in sorted order.

Làm cách nào để triển khai cây tìm kiếm nhị phân trong C?

Để chèn nút mới, chúng ta phải làm theo các bước đã cho. .
Tìm nút mà nút mới phải được chèn vào và lưu nút đã truy cập vào biến tạm thời
Bây giờ, dữ liệu nút mới sẽ được so sánh với tạm thời
Nếu dữ liệu lớn hơn dữ liệu tạm thời thì hãy chèn nút mới ở bên phải của tạm thời

Mã BST có bằng C không?

Trong hướng dẫn này, bạn sẽ tìm hiểu cách hoạt động của Cây tìm kiếm nhị phân. Ngoài ra, bạn sẽ tìm thấy các ví dụ hoạt động của Cây tìm kiếm nhị phân trong C, C++, Java và Python . Cây tìm kiếm nhị phân là một cấu trúc dữ liệu cho phép chúng tôi nhanh chóng duy trì một danh sách các số được sắp xếp.

Cách đọc cây nhị phân trong C?

Hiển thị cây nhị phân . Đặt hàng trước hiển thị nút gốc, nút bên trái và sau đó là nút bên phải. Hiển thị theo thứ tự nút trái, nút gốc và sau đó là nút phải. Thứ tự sau hiển thị nút trái, nút phải và sau đó là nút gốc. pre-order, in-order and post-order. Pre-order displays root node, left node and then right node. In-order displays left node, root node and then right node. Post-order displays left node, right node and then root node.