Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的程序只返回树的根,而不是打印整个树 公共队列存储\u顺序(节点n){ 队列q=新的LinkedList(); 如果(n.left!=null)按顺序存储(n.left); q、 添加(n.数据); 如果(n.right!=null)按顺序存储(n.right); 返回q; }_Java_Tree - Fatal编程技术网

Java 我的程序只返回树的根,而不是打印整个树 公共队列存储\u顺序(节点n){ 队列q=新的LinkedList(); 如果(n.left!=null)按顺序存储(n.left); q、 添加(n.数据); 如果(n.right!=null)按顺序存储(n.right); 返回q; }

Java 我的程序只返回树的根,而不是打印整个树 公共队列存储\u顺序(节点n){ 队列q=新的LinkedList(); 如果(n.left!=null)按顺序存储(n.left); q、 添加(n.数据); 如果(n.right!=null)按顺序存储(n.right); 返回q; },java,tree,Java,Tree,我一直在尝试将树的顺序表达式存储到队列中,但我的程序不起作用。我的程序有什么问题?基本上,当您使用Queue q=new LinkedList()时,重新实例化变量q。因此,每次调用方法时,都会得到一个新的空LinkedList 要解决此问题,只需在方法外部存储q,如下所示: public Queue<Integer> store_inorder(node n){ Queue<Integer> q=new LinkedList<>(); if(

我一直在尝试将树的顺序表达式存储到队列中,但我的程序不起作用。我的程序有什么问题?

基本上,当您使用
Queue q=new LinkedList()时,重新实例化变量q。因此,每次调用方法时,都会得到一个新的空
LinkedList

要解决此问题,只需在方法外部存储
q
,如下所示:

public Queue<Integer> store_inorder(node n){
    Queue<Integer> q=new LinkedList<>();
    if(n.left!=null)store_inorder(n.left);
    q.add(n.data);
    if(n.right!=null)store_inorder(n.right);
    return q;
}
Queue q=newlinkedlist();
公共队列存储\u顺序(节点n){
如果(n.left!=null)
按顺序存储(n.左);
q、 添加(n.数据);
如果(n.right!=null)
按顺序存储(右);
返回q;
}

为了更详细地了解这种行为,我建议您研究一下java中变量的范围。

基本上,当您使用
Queue q=new LinkedList()时,重新实例化变量q。因此,每次调用方法时,都会得到一个新的空
LinkedList

要解决此问题,只需在方法外部存储
q
,如下所示:

public Queue<Integer> store_inorder(node n){
    Queue<Integer> q=new LinkedList<>();
    if(n.left!=null)store_inorder(n.left);
    q.add(n.data);
    if(n.right!=null)store_inorder(n.right);
    return q;
}
Queue q=newlinkedlist();
公共队列存储\u顺序(节点n){
如果(n.left!=null)
按顺序存储(n.左);
q、 添加(n.数据);
如果(n.right!=null)
按顺序存储(右);
返回q;
}
为了更详细地了解这种行为,我建议您研究一下java中变量的范围。

public Queue store\u inoorder(节点n){
//创建一个队列,在其中存储顺序遍历。
队列q=新的LinkedList();
//调用函数将根在“n”的树按顺序遍历存储到“q”中。
存储(n,q);
返回q;
}
公共无效存储(节点n,队列q){
如果(n.left!=null)存储(n.left);
q、 添加(n.数据);
如果(n.right!=null)存储(n.right);
}
公共队列存储\u顺序(节点n){
//创建一个队列,在其中存储顺序遍历。
队列q=新的LinkedList();
//调用函数将根在“n”的树按顺序遍历存储到“q”中。
存储(n,q);
返回q;
}
公共无效存储(节点n,队列q){
如果(n.left!=null)存储(n.left);
q、 添加(n.数据);
如果(n.right!=null)存储(n.right);
}

您正在创建
队列q=new LinkedList()在所有递归方法调用中。所以您可以通过将参数传递给方法来解决这个问题。如此相似

在方法调用中

public Queue<Integer> store_inorder(node n){
    //Create a queue where inorder traversal will be stored.
    Queue<Integer> q=new LinkedList<>();
    // call the function to store inorder traversal of tree rooted at 'n' into 'q'.
    store(n, q);
    return q;
}
public void store(node n, Queue<Integer> q){
    if(n.left!=null) store(n.left);
    q.add(n.data);
    if(n.right!=null) store(n.right);
}
。。
//如果您已经有了要添加新节点的队列列表,请发送到store_inoorder方法,而不是创建新实例
队列q=新的LinkedList();
按顺序存储_(节点n,q);
//现在在q中,设置了新节点。
//在改变的q上做点什么。
..
你的方法应该像这样改变

..
// if you already have a queue list to add new node, please send to store_inorder method instead of creating new instance
Queue<Integer> q=new LinkedList<>();
store_inorder(node n,q);
//now in q , new node was set. 
//do it something on changed q.
..
公共无效存储\u顺序(节点n,队列q){
如果(n.left!=null)按顺序存储(n.left);
q、 添加(n.数据);
如果(n.right!=null)按顺序存储(n.right);
}

您正在创建
队列q=new LinkedList()在所有递归方法调用中。所以您可以通过将参数传递给方法来解决这个问题。如此相似

在方法调用中

public Queue<Integer> store_inorder(node n){
    //Create a queue where inorder traversal will be stored.
    Queue<Integer> q=new LinkedList<>();
    // call the function to store inorder traversal of tree rooted at 'n' into 'q'.
    store(n, q);
    return q;
}
public void store(node n, Queue<Integer> q){
    if(n.left!=null) store(n.left);
    q.add(n.data);
    if(n.right!=null) store(n.right);
}
。。
//如果您已经有了要添加新节点的队列列表,请发送到store_inoorder方法,而不是创建新实例
队列q=新的LinkedList();
按顺序存储_(节点n,q);
//现在在q中,设置了新节点。
//在改变的q上做点什么。
..
你的方法应该像这样改变

..
// if you already have a queue list to add new node, please send to store_inorder method instead of creating new instance
Queue<Integer> q=new LinkedList<>();
store_inorder(node n,q);
//now in q , new node was set. 
//do it something on changed q.
..
公共无效存储\u顺序(节点n,队列q){
如果(n.left!=null)按顺序存储(n.left);
q、 添加(n.数据);
如果(n.right!=null)按顺序存储(n.right);
}

将以下行设为全局变量。队列q=新的LinkedList();请缩进代码,使下面的行成为全局变量。队列q=新的LinkedList();请缩进代码请重新检查代码@Nathan你的密码和OP的一样s@efex09事实上,我在记录x时无意地恢复了代码(感谢您的指点!方法作用域与外部不同。因此,如果您的
q
参数不是全局参数,您不能在
store\u inoorder
方法中使用。您可以检查吗?@crowey您不需要将队列作为全局变量。您的
store\u inoorder
方法是公共的,并且该方法确实可以访问成员
q位于同一类中。请重新检查代码。@Nathan您的代码与OP相同's@efex09事实上,我在记录x时无意地恢复了代码(感谢您的指点!方法作用域与外部不同。因此,如果您的
q
参数不是全局参数,您不能在
store\u inoorder
方法中使用。您可以检查吗?@crowey您不需要将队列作为全局变量。您的
store\u inoorder
方法是公共的,并且该方法确实可以访问成员
q位于同一类中。请提供有关您的帖子的信息。请不要只发布代码。此外,您每次调用
store\u inoorder(节点n)
时仍在重新创建队列。请提供有关您帖子的信息。请不要只发布代码。此外,您每次调用
store\u inoorder时仍在重新创建队列(节点n)