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

时间:2015-04-03 13:34:26

标签: java algorithm binary-tree

问题来自:

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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