2015-04-03 37 views
0

问题来自:二叉树右侧视图:我的代码出了什么问题?

https://leetcode.com/problems/binary-tree-right-side-view/

这里是我的代码:

public class Solution { 

    static int maxLevel = 0; 

    public List<Integer> rightSideView(TreeNode root) { 

     List<Integer> list = new ArrayList<Integer>(); 

     rightViewUtil(root, 1, list); 

     return list; 
    } 

    private void rightViewUtil(TreeNode root, int level, List list){ 

     if (root == null) return; 

     if (maxLevel < level){ 
      list.add(root.val); 
      maxLevel = level; 
     } 

     rightViewUtil(root.right, level + 1, list); 
     rightViewUtil(root.left, level + 1, list); 

    } 

} 

当我提交的代码,它显示我的代码给出了错误的答案:

输入: {1,2}输出:[2]预期:[1,2]

然而,当我运行本地代码与main,(我在本地更改类名)

TreeNode node = new TreeNode(1); 
node.right = new TreeNode(2); 
// node.left = new TreeNode(2); 

List<Integer> list = new BinaryTreeRightSideView().rightSideView(node); 

for (Integer i : list){ 
    System.out.println(i); 
} 

输出是1 2实际。

+0

您确定要正确解释输入吗?我不清楚'{1,2}'是如何描述一棵“树”的。 – 2015-04-03 14:02:04

回答

0

这一个真的令人费解,但问题是,你已经使maxLevel静态。结果,该价值在多次测试中持续存在。删除static,您的代码通过测试。

在该测试的独立运行中,您的代码工作得很好。问题是,maxLevel已经是1当测试开始,导致您的代码不添加根节点。

0

int [] maxLevel = new int [] {0};并将其作为参数传递给util func。