cuốn sách gpt4 ai đã làm

android — Lặp lại chiều cao của cây tìm kiếm nhị phân

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 03:38:00 25 4
mua khóa gpt4 Nike

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.

Nguyên tắc làm việc

Đặ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/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress