2015-04-03 34 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。