Java中不使用全局变量的递归
我在java中使用递归时遇到问题,没有使用静态变量,我无法根据函数的返回类型构造递归调用。例如:这是我编写的一个按顺序遍历树的代码,但它只返回一个元素,我需要知道我做错了什么,以及如何纠正它Java中不使用全局变量的递归,java,recursion,Java,Recursion,我在java中使用递归时遇到问题,没有使用静态变量,我无法根据函数的返回类型构造递归调用。例如:这是我编写的一个按顺序遍历树的代码,但它只返回一个元素,我需要知道我做错了什么,以及如何纠正它 Code: public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ls = new LinkedList<Integer>();
Code:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ls = new LinkedList<Integer>();
if(root!=null)
{
inorderTraversal(root.left);
ls.add(root.val);
inorderTraversal(root.right);
}
return ls;
}
If I try to write it this way, I get an error <Identifier Expected>
Code2:
public void inorderTraversal(TreeNode root, ls)
{
if(root!=null)
{
inorderTraversal(root.left,ls);
ls.add(root.val);
inorderTraversal(root.right,ls);
}
}
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ls=new LinkedList<Integer>();
inorderTraversal(root,ls);
return ls;
}
}
代码:
OrderTraversal中的公共列表(TreeNode根目录){
List ls=新链接列表();
if(root!=null)
{
inorderTraversal(root.left);
ls.add(root.val);
inorderTraversal(root.right);
}
返回ls;
}
如果我试着这样写,我会得到一个错误
代码2:
OrderTraversal中的公共void(树节点根,ls)
{
if(root!=null)
{
inorderTraversal(根、左、左);
ls.add(root.val);
inorderTraversal(root.right,ls);
}
}
OrderTraversal中的公共列表(TreeNode根目录){
List ls=新链接列表();
inorderTraversal(根,ls);
返回ls;
}
}
将结果列表作为参数传入:
public void inorderTraversal(TreeNode root, List<Integer> ls) {
if(root!=null)
{
inorderTraversal(root.left, ls);
ls.add(root.val);
inorderTraversal(root.right, ls);
}
}
orderTraversal中的公共void(树节点根,列表ls){
if(root!=null)
{
inorderTraversal(root.left,ls);
ls.add(root.val);
inorderTraversal(root.right,ls);
}
}
一个空行就足够了,除非你的目标是让你的代码尽可能难以阅读。对不起,我只是从我一直在做的在线编译器中复制了它。java不是按值传递参数吗?所以我怎么能期望附加相同的列表?java是按值传递的,但有一个微妙之处。对于对象,Java按值传递对象引用。如果您来自对象可以位于堆栈上的语言,那么这是一个有点棘手的部分。在Java中,所有对象都位于堆上,指定它们的变量都是引用。