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;
}
我一直试图将树的Inorder表达式存储到队列中,但是我的程序不起作用。我的程序出什么问题了?
答案 0 :(得分:2)
基本上,当您使用Queue<Integer> q=new LinkedList<>();
时,需要重新实例化变量q。因此,每次调用方法时,都会得到一个新的空LinkedList
。
要解决此问题,只需将q
存储在方法之外,就像这样:
Queue<Integer> q = new LinkedList<>();
public Queue<Integer> store_inorder(node n){
if(n.left!=null)
store_inorder(n.left);
q.add(n.data);
if(n.right!=null)
store_inorder(n.right);
return q;
}
要详细了解它的行为,建议您研究一下 java中变量的范围。
答案 1 :(得分:1)
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);
}
答案 2 :(得分:1)
您正在所有递归方法调用中创建Queue<Integer> q=new LinkedList<>();
。因此,您可以通过将参数传递给方法来解决此问题。就像;
在您的方法调用中
..
// 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.
..
您的方法应该像;
public void store_inorder(node n, Queue<Integer> q) {
if (n.left != null) store_inorder(n.left);
q.add(n.data);
if (n.right != null) store_inorder(n.right);
}