- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang thử một cách tiếp cận lặp đi lặp lại để tìm chiều cao/độ sâu của cây tìm kiếm nhị phân. Về cơ bản, tôi đang cố gắng sử dụng tìm kiếm theo chiều rộng để tính độ sâu bằng cách sử dụng hàng đợi để lưu trữ các nút cây và chỉ sử dụng một số nguyên để giữ độ sâu hiện tại của cây. Mỗi nút trong cây được xếp hàng đợi và các nút con của nó được kiểm tra. Nếu các nút con tồn tại, biến độ sâu sẽ tăng lên. Đây là mã:
khoảng trống công khai calcDepthIterative() {
Hàng đợi nodeQ = new LinkedList();
Nút TreeNode = gốc;
mức int = 0;
cờ boolean = sai;
nodeQ.add(nút);
while(!nodeQ.isEmpty()) {
nút = nodeQ.remove();
cờ = sai;
if(node.leftChild != null) {
nodeQ.add(node.leftChild);
cờ = đúng;
}
if(node.rightChild != null) {
nodeQ.add(node.rightChild);
cờ = đúng;
}
cấp độ if(cờ)++;
}
System.out.println(cấp độ);
}
Tuy nhiên, mã không hoạt động trong mọi tình huống. Ví dụ: đối với cây sau:
10
/ \
4 18
\ / \
5 17 19
Nó hiển thị độ sâu là 3, không phải 2. Tôi đã tạo một phiên bản thay thế bằng cách sử dụng hàng đợi bổ sung để lưu trữ độ sâu hiện tại, sử dụng trang này ý tưởng vào. .Tôi muốn tránh sử dụng thêm hàng đợi nên tôi cố gắng tối ưu hóa nó. Đây là mã hợp lệ, mặc dù sử dụng hàng đợi bổ sung.
khoảng trống công khai calcDepthIterativeQueue() {
Hàng đợi nodeQ = new LinkedList();
Hàng đợi lenQ = new LinkedList();
Nút TreeNode = gốc;
nodeQ.add(nút);
lenQ.add(0);
int maxLen = 0;
while(!nodeQ.isEmpty()) {
TreeNode Curr = nodeQ.remove();
intcurrLen = lenQ.remove();
if(curr.leftChild != null) {
nodeQ.add(curr.leftChild);
lenQ.add(currLen + 1);
}
if(curr.rightChild != null) {
nodeQ.add(curr.rightChild);
lenQ.add(currLen + 1);
}
maxLen = currLen > maxLen ?
}
System.out.println(maxLen);
}
câu hỏi:
Có cách nào khắc phục phương pháp đầu tiên để nó trả về độ sâu chính xác không?
biên tậpXem câu trả lời được chấp nhận bên dưới
Mã Java cho câu trả lời của rici:
khoảng trống công khai calcDepthIterative() {
Hàng đợi nodeQ = new LinkedList();
độ sâu int = 0;
nodeQ.add(root);
while(!nodeQ.isEmpty()) {
int nodeCount = nodeQ.size();
if(nodeCount == 0)
phá vỡ;
độ sâu++;
while(nodeCount > 0) {
TreeNode topNode = nodeQ.remove();
if(topNode.leftChild != null)
nodeQ.add(topNode.leftChild);
if(topNode.rightChild != null)
nodeQ.add(topNode.rightChild);
nútCount--;
}
}
System.out.println(độ sâu);
}
câu trả lời hay nhất
Đây là một cách để làm điều đó:
Tạo Hàng đợi và đẩy gốc vào đó.
Đặt độ sâu = 0
Vòng lặp:
Đặt NodeCount = kích thước (Hàng đợi)
Nếu NodeCount là 0:
trả về độ sâu.
Tăng độ sâu.
Trong khi NodeCount> 0:
Loại bỏ nút ở phía trước hàng đợi.
Đẩy các con của nó, nếu có, ra sau hàng đợi
Giảm số nút.
Đặt mỗi lần Số nút
, quá trình quét sẽ bắt đầu trên một dòng mới. NodeCount được đặt thành số nút trong hàng. Khi tất cả các nút này bị xóa (tức là NodeCount giảm xuống 0), hàng được hoàn thành và tất cả nút con của nút trên hàng đã được thêm vào hàng đợi, do đó hàng đợi lại có một hàng hoàn chỉnh và NodeCount lại được đặt thành The số nút trong hàng.
Về C# - lặp lại chiều cao của cây tìm kiếm nhị phân, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/15013956/
Về cây B và cây B+, có một câu hỏi kinh điển trên Internet: Tại sao MongoDb sử dụng cây B, trong khi các chỉ mục MySQL sử dụng cây B+ nhưng MongoDb có thực sự sử dụng cây B không?
Làm cách nào để triển khai Cây R* dưới dạng cây liên tục (dựa trên đĩa)? Kiến trúc của tệp chứa chỉ mục cây R* hoặc chứa các giá trị lá là gì? Lưu ý: Ngoài ra, làm cách nào để thực hiện các thao tác chèn, cập nhật và xóa trong cây R* liên tục như vậy? Lưu ý 2: Tôi đã triển khai một
Hiện tại, tôi đang làm việc để biểu diễn cây AST mà tôi đã viết bằng SML bằng Java để tôi luôn có thể duyệt qua nó bằng Java. Tôi đang tự hỏi liệu tôi có nên tạo một lớp Node trong Java chứa dữ liệu tôi muốn biểu diễn và một số
Tôi đã sử dụng thư viện này trước http://www.cs.umd.edu/~mount/ANN/. Tuy nhiên, chúng không cung cấp cách triển khai truy vấn phạm vi. Tôi đoán liệu có triển khai truy vấn phạm vi C++ (hình tròn hoặc hình chữ nhật) để truy vấn dữ liệu 2D hay không. Cảm ơn. tối ưu
Trước khi phân tích sâu hơn lý do tại sao chỉ mục cơ sở dữ liệu MySQL chọn sử dụng cây B+, tôi tin rằng nhiều bạn vẫn còn hơi mơ hồ về cây trong cấu trúc dữ liệu. Vì vậy, chúng ta sẽ khám phá từng bước quá trình tiến hóa của cây từ nông cạn đến. sâu và dẫn đến cây B và lựa chọn chỉ mục cơ sở dữ liệu MySQL
Tiếp tục từ chương cuối của cuốn sách, hôm nay tôi sẽ cùng bạn tự mình nhận ra cái cây. Tôi tin rằng qua nghiên cứu các chương trước, mọi người đã hiểu cây là gì. Ngày nay chúng ta chủ yếu tập trung vào cây nhị phân, sử dụng lưu trữ tuần tự và lưu trữ chuỗi để triển khai cây. 01. Triển khai mảng Như chúng ta đã nói ở phần trước,
Trong phần cuối của cuốn sách, chúng ta tiếp tục nói về cây nhị phân, cây N-ary và cây lưu trữ. 01. Cây nhị phân đầy đủ Nếu cây nhị phân có số lượng nút tối đa trong mỗi lớp ngoại trừ lớp nút cuối cùng, nghĩa là mỗi nút có hai nút con và tất cả các nút lá đều nằm ở lớp cuối cùng, thì điều này
Cây là một cấu trúc dữ liệu phi tuyến tính, là cấu trúc phân cấp được xác định bởi các mối quan hệ phân nhánh. Do đó, về bản chất, hình dạng rất giống với một cây lộn ngược và trong cấu trúc dữ liệu thì gốc hướng lên trên và lá hướng xuống dưới. . Cây là gì? 01. Cây định nghĩa bao gồm n (n>=0) nút phần tử
Hôm nay chúng ta hãy bắt đầu với một "cái cây" của hệ điều hành. Hãy xem cách phát triển từ một cây non nhỏ thành một cây lớn. Chạy CPU CPU rất đơn giản để chạy, nó chỉ liên tục lấy các giá trị từ bộ nhớ và thực thi chúng. Nếu CPU hoạt động không tốt, IO là một công việc tốn thời gian. Nếu CPU đang lấy các giá trị.
Tôi muốn tạo một cây phát sinh gen đơn giản cho lớp sinh vật biển để làm ví dụ giáo dục. Tôi có một danh sách các loài có thứ hạng phân loại: Nhóm <- c("Benthos","Benthos","Benthos","Be
Tôi gặp khó khăn khi xóa các nút khỏi mã này, nếu tôi chèn số 12 và cố xóa nó, nó sẽ không xóa nó, tôi đã thử gỡ lỗi và có vẻ như khi nó cố xóa, nó báo lỗi ra khỏi cây. Nhưng nếu tôi cố xóa một nút mà nó đã chèn vào nút chính thì nó sẽ xóa nút đó hoặc tôi chèn số
Các nút lá của cây B+ được liên kết với nhau. Hãy coi cấu trúc con trỏ của cây B+ như một đồ thị có hướng, không có tính tuần hoàn. Nhưng việc bỏ qua hướng của con trỏ và coi nó như các nút lá vô hướng được liên kết với nhau sẽ tạo ra các chu trình trong biểu đồ. Trong Haskell, cách xây dựng một chiếc lá là con của nút bên trong cha mẹ
Tôi đang sử dụng điều khiển cây trong GWT. Tôi có một tiện ích tùy chỉnh mà tôi thêm dưới dạng TreeItem: Tree testTree = new Tree(); testTree.addItem(myWidget);
Nó hơi giống cấu trúc cây lai/danh sách liên kết. Đây là cách tôi xác định cấu trúc struct node { nodeP anh chị em; nodeP cha;
Tôi đã viết mã sử dụng hàng đợi để duyệt cây, nhưng hàm dequeue bên dưới tạo ra lỗi, có vấn đề gì với head = p->next không? Không hiểu sao đoạn này sai. void Levelorder(void) { nút *tmp,
Ví dụ: tôi muốn phân tích mảng sau: var array1 = ["abcd", "aefg", "ah", "aij", "abk"] Enter: var json1 = { "nod
Câu hỏi -> Cho một cây nhị phân và một tổng, xác định xem cây có đường đi từ gốc đến lá sao cho tổng các giá trị dọc theo đường đi bằng tổng đã cho. Giải pháp của tôi -> Giải pháp lớp công khai { public bo
Tôi có nhiệm vụ tạo một cây java chứa ba cột: tên môn thể thao, số lượng môn thể thao trong danh mục môn thể thao và bản cập nhật gần đây nhất. Điều tương tự được thể hiện trong hình bên dưới: Như bạn có thể thấy, có 4 môn thể thao: thể thao dưới nước, thể thao bóng, nhảy dù và khiêu vũ. Khi tôi mở rộng sk
Tôi muốn triển khai B+ Tree trong cơ sở dữ liệu H2, nhưng tôi muốn biết, chức năng B+ Tree có sẵn trong cơ sở dữ liệu H2 không? Câu trả lời hay nhất H2 đã sử dụng cây B+ (lớp PageBtree). Giới thiệu về cơ sở dữ liệu mysql-H2
Giả sử chúng ta có 5 mảng chuỗi: String[] array1 = {"hello", "i", "cat"}; String[] array2 = {"hello", "i", "am"};
Tôi là một lập trình viên xuất sắc, rất giỏi!