0
点赞
收藏
分享

微信扫一扫

LeetCode.对称二叉树

女侠展昭 2022-01-12 阅读 87

概述

给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
在这里插入图片描述

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:
在这里插入图片描述

输入:root = [1,2,2,null,3,null,3]
输出:false

提示:

· 树中节点数目在范围 [1, 1000] 内
· -100 <= Node.val <= 100

解题代码

递归

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        return check(root, root);
    }

    public boolean check(TreeNode p, TreeNode q) {
        if (p == null && q == null) {
            return true;
        }
        if (p == null || q == null) {
            return false;
        }
        return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);
    }
}

迭代

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
   public boolean isSymmetric(TreeNode root) {
        Deque<TreeNode> leftTree=new LinkedList<>();
        Deque<TreeNode> rightTree=new LinkedList<>();
        leftTree.add(root.left);
        rightTree.add(root.right);
        while (!leftTree.isEmpty()||!rightTree.isEmpty()){
            int ln=leftTree.size();
            int rn=rightTree.size();
            if (ln!=rn)return false;
            for (int i=0;i<ln;i++){
                TreeNode lNode=leftTree.pollFirst();
                TreeNode rNode=rightTree.pollFirst();
                if (lNode==null&&rNode==null)continue;
                else if (lNode==null||rNode==null)return false;
                else {
                    if (lNode.val!=rNode.val)return false;
                    leftTree.addLast(lNode.left);
                    leftTree.addLast(lNode.right);
                    rightTree.addLast(rNode.right);
                    rightTree.addLast(rNode.left);
                }
            }
        }
        return true;
    }
}
举报

相关推荐

0 条评论