剑指Offer28:对称的二叉树

题目:请实现一个函数,用来判断一棵二叉树是否是对称的,如果一棵二叉树和它的镜像一样,那么它是对称的。

 这里第一颗树是对齐的,第二颗树不是对齐的,第三颗树也不是。

通常二叉树有前序,中序,后序遍历方法,而书上提出以前序对称的遍历方法,即第一颗树前序遍历的

顺序是  8,6,5,7,6,7,5  而前序对称的遍历(根右左次序) 8,6,5,7,6,7,5 即和前序遍历一样,但是用这个方法去遍历第三颗树这样就不对了,因为都是7777777,所以这里把每一层的null节点算进去了。

即7,7,null,7,7,7,7.     

public boolean isSymmetric(TreeNode root) {
    
        
        return isSyme(root,root);   //传了2个root
    }
    
    public boolean isSyme(TreeNode root1,TreeNode root2){
        
        
        if(root1==null&&root2==null){       //当且传入的2个root为空,return true.
            return true;
        }
        
        if(root1==null|| root2==null){      //只有一个为空,另外没有即不堆成return false
            return false;
        }
        
        
        if(root1.val!=root2.val){           //存在对称的点,但是值不等 return false
            
            return false;
        }
                                           //进行左右对称的子递归        
        return isSyme(root1.left,root2.right)&&isSyme(root1.right,root2.left);
        
    }

猜你喜欢

转载自blog.csdn.net/weixin_39137699/article/details/89668127
今日推荐