Khi nói đến cây nhị phân, có một số loại traversals khác nhau có thể được thực hiện đệ quy. Chúng được viết theo thứ tự chúng được tham chiếu sau đó được truy cập (L = Left child, V = truy cập nút đó, R = right child).
- In-trật tự traversal (LVR)
- Xếp theo thứ tự traversal (RVL)
- Preorder traversal (VLR)
- Postorder traversal (LRV)
Mã của bạn dường như được thực hiện phương thức truyền tải postorder, nhưng bạn đang nhận được một vài điều hỗn hợp. Đầu tiên, nút là những gì bạn muốn đi qua; dữ liệu là những gì bạn muốn truy cập. Thứ hai, bạn không có lý do gì để trả lại chính nút đó, theo cách thực hiện điều này. Mã của bạn không cho phép một điều kiện để nói, 'Tôi đang tìm kiếm này dữ liệu cụ thể, bạn có nó ông Node @ 0xdeadbeef?', Mà sẽ được tìm thấy với một số loại tham số tìm kiếm thêm.
Trình duyệt BST học tập chỉ in chính các nút. Nếu bạn muốn thêm chức năng tìm kiếm, nó chỉ thêm một tham số nữa, cũng như kiểm tra bổ sung cho nút bên phải.
Dưới đây là một đoạn:
// Academic
public void traverse (Node root){ // Each child of a tree is a root of its subtree.
if (root.left != null){
traverse (root.left);
}
System.out.println(root.data);
if (root.right != null){
traverse (root.right);
}
}
// Search with a valid node returned, assuming int
public Node traverse (Node root, int data){ // What data are you looking for again?
if(root.data == data) {
return root;
}
if (root.left != null){
return traverse (root.left, data);
}
if (root.right != null){
return traverse (root.right, data);
}
return null;
}
Lệnh 'phương pháp traverse' là cho việc sử dụng các yếu tố trong cây nhị phân của bạn nhưng bạn đang trở về gốc trái, phải gốc hoặc gốc (thậm chí nếu gốc là 'null'!). Ý tưởng cho các hàm đệ quy là xác định trường hợp cơ sở và sau đó mã lặp lại để có được cho đến khi trường hợp cơ sở đó –
Bạn đang cố gắng thực hiện một kiểu truyền tải nào? nó là một 'BST'? Bạn có cần chèn một nút vào đúng vị trí trong 'BST' không? – noMAD
Nếu bạn đi qua bên trái, bạn quay trở lại như bước cuối cùng trong dòng 4 và không bao giờ đi qua bên phải và không bao giờ trả về mã hiện tại. Điều đó không ổn. –