给定一棵二叉树,返回其节点值的顺序遍历。
例如:给定二叉树[1,null,2,3],12/3.返回(1、3、2).
下面是我的代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
helper(root, list);
return list;
}
public void helper(TreeNode root, List<Integer> list){
if (root == null){
return;
}
if(root.left == null){
System.out.println(root.val);
list.add(root.val);
inorderTraversal(root.right);
}else{
inorderTraversal(root.left);
System.out.println(root.val);
list.add(root.val);
if (root.right != null){
inorderTraversal(root.right);
}
}
}
}
Print函数给出1,3,2,这是正确的,但是列表只返回[1]
因为你在每个inorderTraversal函数中都声明了新的ArrayList。
从helper
呼叫inorderTraversal
时,您正在失去list
。替换
inorderTraversal(node);
helper(node, list);
或
list.addAll(inorderTraversal(node));
你的方法也包含冗余复杂性,你可以直接写:
public void helper(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
helper(root.left, list);
System.out.println(root.val);
list.add(root.val);
helper(root.right, list);
}
这是因为在helper
中您正在调用实例化
inorderTraversal
List<Integer> list = new ArrayList<Integer>();
这似乎是一种奇怪的方式来做递归,但无论如何将helper
中的list
传递给inorderTraversal