题解 | #对称的二叉树#

对称的二叉树

https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return bool布尔型
     */
    public boolean isSymmetrical (TreeNode pRoot) {
        // write code here
        if(pRoot==null||(pRoot.left==null&&pRoot.right==null))//0,1
            return true;
        if(pRoot.left==null||pRoot.right==null||pRoot.left.val!=pRoot.right.val)//2,不等3树
            return false;
        Stack<TreeNode> s1=new Stack<>();//存左子树
        Stack<TreeNode> s2=new Stack<>();//存右子树
        s1.add(pRoot.left);
        s2.add(pRoot.right);
        while(!s1.isEmpty()&&!s2.isEmpty()){
            TreeNode r1=s1.pop();
            TreeNode r2=s2.pop();
            if(r1.left!=null&&r2.right!=null){//左子树的左对右子数的右
                if(r1.left.val!=r2.right.val)
                    return false;
                s1.add(r1.left);
                s2.add(r2.right);
                }else{
                if((r1.left==null&&r2.right!=null)||(r1.left!=null&&r2.right==null))
                    return false;
            }
            if(r1.right!=null&&r2.left!=null){
                if(r1.right.val!=r2.left.val)
                    return false;
                s1.add(r1.right);
                s2.add(r2.left);
            }else{
                if((r1.right==null&&r2.left!=null)||(r1.right!=null&&r2.left==null))
                    return false;
            }   
        }
        if(!s1.isEmpty()||!s2.isEmpty())
            return false;
        return true;
        
    }
}

全部评论

相关推荐

嗨害嗨我来了:感谢我吧,上次我在食堂敲打了一个姓雷的,他说马上给大学生们准备hc
不卡学历的大厂有哪些?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务