Java 给定一个节点,烧毁二叉树

Java 给定一个节点,烧毁二叉树,java,tree,binary-tree,Java,Tree,Binary Tree,我试图实现给定的问题,但没有得到所需的输出我的程序有什么问题。以编程方式,我试图找出目标是否不存在于左子树或右子树中,如果目标存在于左子树中,则从左侧返回1,并将其子级推送到队列中,对于右子树也是如此 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.l

我试图实现给定的问题,但没有得到所需的输出我的程序有什么问题。以编程方式,我试图找出目标是否不存在于左子树或右子树中,如果目标存在于左子树中,则从左侧返回1,并将其子级推送到队列中,对于右子树也是如此

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;
    
}
节点根=新节点(1);
root.left=新节点(2);
root.right=新节点(3);
root.left.left=新节点(4);
root.left.right=新节点(5);
root.right.left=新节点(6);
root.right.right=新节点(7);
静态队列q=新链接列表()
根节(根,2);
int size=q.size();

对于(int i=0;i而言,问题在于在
main
中的最后一个循环中,您不会像在
burnTheNodes
中的类似循环中那样将子循环添加到队列中


只要队列中有条目,您就应该继续此过程,只要提取的节点有子节点,就应该继续添加条目。

q
未声明。感谢您指出这一点,但我没有注意到,在粘贴代码时,这不是实际问题,问题在逻辑中的某个地方。