2016-03-08 7 views
-3
public static boolean isMirror(TreeNode left, TreeNode right){ 
     if (left==null && right==null){ 
      return true; 
     } 
     if (left!=null && right!=null) { 
      if (left.data == right.data) { 
       return (isMirror(left.left, left.right) && isMirror(right.left, right.right)); 
      } 

     } 
     return false; 

    } 

    public static boolean isSymmetric(TreeNode root){ 
     if (root==null){ 
      return true; 
     } 
     return isMirror(root.left, root.right); 
    } 


    public static void main(String[] args){ 
     TreeNode root=new TreeNode(); 
     TreeNode n1=new TreeNode(); 
     TreeNode n2=new TreeNode(); 
     TreeNode n3=new TreeNode(); 
     TreeNode n4=new TreeNode(); 

     root.left=n1; 
     root.right=n2; 
     n1.left=n3; 
     n2.right=n4; 


     root.data=3; 
     n1.data=6; 
     n2.data=6; 
     n3.data=1; 
     n4.data=1; 

Я ожидаю получить истинное, но получаю false. Я предполагаю, что пропустил очко или два. Как его исправить?Метод рекурсии моего дерева не работает

+1

Я предполагаю, что это должно быть 'вернуть isMirror (left.left, right.left) && isMirror (left.right, right.right);'. – Tunaki

+3

Хорошее время для начала использования отладчика. –

+3

Почему отладка, когда вы можете приехать в беспорядок, чтобы SO и кто-то отлаживает вас ........? – redFIVE

ответ

4

Благодаря Shire Resident предложению:

public static boolean isMirror(TreeNode left, TreeNode right){ 
     if (left==null && right==null){ 
      return true; 
     } 
     if (left!=null && right!=null) { 
      if (left.data == right.data) { 
       //return (isMirror(left.left, left.right) && isMirror(right.left, right.right)); 
       return (isMirror(left.left, right.right) && isMirror(left.right, right.left)); 
      } 

     } 
     return false; 

    }