2017-11-21 21 views
1

元の質問はここに添付されていますhttps://leetcode.com/problems/balanced-binary-tree/description/Leetcode 110.バランスの取れたバイナリツリー解決策が間違っている理由を聞かせますか?

public class BalancedBinaryTree { 

    static boolean balance = true; 

    public boolean isBalanced(TreeNode root) { 
     if (root == null) 
      return true; 
     return (Math.abs(depth(root.left) - depth(root.right)) <= 1) && balance; 
    } 

    public int depth(TreeNode root) { 
     if (balance) { 
      if (root == null) 
       return 0; 

      int lengthOfLeft = depth(root.left); 
      int lengthOfRight = depth(root.right); 

      if (Math.abs(lengthOfLeft - lengthOfRight) > 1) { 
       balance = false; 
      } 
      return Math.max(lengthOfLeft, lengthOfRight) + 1; 
     } else { 
      return 0; 
     } 
    } 
+1

あなたのコードは何ですか?あなたの質問に関連する言語タグを追加してください。 –

+0

あなたはたぶんこれをhttps://codereview.stackexchange.com/ –

+0

に投稿してください。int lengthOfLeftは常に0になります。前の値も追加する必要がありますか? –

答えて

0

はこれを試してみてください。 基本的には、出力が正(期待値)のテストから負(期待値)のテストに移行するため、残高を真に戻す必要があります。

static boolean balance = true; 

public boolean isBalanced(TreeNode root) { 
    balance = true; 
    if (root == null) 
     return true; 
    return (Math.abs(depth(root.left) - depth(root.right)) <= 1) && balance; 
} 

public int depth(TreeNode root) { 
    if (balance) { 
     if (root == null) 
      return 0; 

     int lengthOfLeft = depth(root.left); 
     int lengthOfRight = depth(root.right); 

     if (Math.abs(lengthOfLeft - lengthOfRight) > 1) { 
      balance = false; 
     } 
     return Math.max(lengthOfLeft, lengthOfRight) + 1; 
    } else { 
     return 0; 
    } 
} 
+0

ああはい。ナイスキャッチ。天才。この「バグ」はあまりにも明白ではありません –

+0

ありがとう:)私はいくつかのテストでEclipseでデバッガを使用したときに私に発生しました。興味深い質問 –

関連する問題