Saya mencoba menerapkan pertanyaan yang diberikan masuk deskripsi tautan di sini tetapi tidak mendapatkan hasil yang diinginkan apa masalah dengan program saya. Secara terprogram saya mencoba mencari apakah target tidak ada di subtree kiri atau kanan, jika ada di subtree kiri, kembalikan 1 dari sisi kiri dan Dorong anak-anaknya ke antrian dan juga untuk pohon kanan.

Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
static Queue<Node> q=new LinkedList<Node>()
    burnTheNodes(root,2);
    int size=q.size();
    for(int i=0;i<size;i++) {
        Node curr=q.remove();
        System.out.println(curr.data);
    }
     
private static int burnTheNodes(Node root,int num) {
    
    if(root==null) {
        return 0;
    }
    if(root.data==num) {
            System.out.println(root.data);
            if(root.left!=null) {
                q.add(root.left);
            }
            if(root.right!=null) {
                q.add(root.right);
            }
            return 1;
        }
    int a=burnTheNodes(root.left, num);
    if(a==1) {
        int size=q.size();
        for(int i=0;i<size;i++) {
            Node curr=q.remove();
            System.out.print(curr.data+"-");
            if(curr.left!=null) {
                q.add(curr.left);
            }
            if(curr.right!=null) {
                q.add(curr.right);
            }
        }
        
        if(root.right!=null) {
            q.add(root.right);
        }
        System.out.println(root.data);
        return 1;
    }
    
    int b=burnTheNodes(root.right, num);
    if(b==1) {
        int size=q.size();
        for(int i=0;i<size;i++) {
            Node curr=q.remove();
            System.out.println(curr.data);
            if(curr.left!=null) {
                q.add(curr.left);
            }
            if(curr.right!=null) {
                q.add(curr.right);
            }
        }
        
        if(root.left!=null) {
            q.add(root.left);
        }
        System.out.println(root.data);
        return 1;
    }
    return 1;
    
}

Outputnya adalah- Tidak ada node 6 dan 7. 2 4-5-1 3

0
Loren 3 April 2021, 08:43

1 menjawab

Jawaban Terbaik

Masalahnya adalah bahwa di loop terakhir di main, Anda tidak menambahkan anak ke antrian, seperti yang Anda lakukan di loop serupa di burnTheNodes.

Anda harus benar-benar melanjutkan proses selama ada entri dalam antrian, dan terus menambahkan entri selama simpul yang diekstraksi memiliki anak.

1
trincot 4 April 2021, 19:22