欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【LeetCode】101. 对称二叉树

程序员文章站 2024-01-11 17:03:52
...

【LeetCode】101. 对称二叉树

用递归的方法:

public class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null) return true;
        // 用递归的方法来判断一个树是不是对称的树
        return method(root.left, root.right);
    }

    // 这个方法能够判断两棵树是不是镜面对称的
    public boolean method(TreeNode node1, TreeNode node2) {
        if (node1 == null && node2 == null) return true;
        if (node1 == null) return false;
        if (node2 == null) return false;
        return node1.val == node2.val &&
                method(node1.left, node2.right)
                && method(node1.right, node2.left);
    }
}

用遍历的方法:

层序遍历,利用两个队列,一个从左向右储存元素,一个从右向左存储元素。进行remove处理,进行比较。
public class Solution {
    public boolean isSymmetric(TreeNode root) {
        if (root == null) return true;
        // 用遍历的方法来解这道题目
        // 用层序遍历的方法
        Queue<TreeNode> queue1 = new LinkedList<>();
        Queue<TreeNode> queue2 = new LinkedList<>();
        queue1.add(root);
        queue2.add(root);
        while (!queue1.isEmpty()) {
            int size = queue1.size();
            for (int i = 0; i < size; i++) {
                TreeNode tmp1 = queue1.remove();
                TreeNode tmp2 = queue2.remove();
                if (tmp1 == null && tmp2 == null) continue;
                if (tmp1 == null || tmp2 == null) return false;
                if (tmp1.val != tmp2.val) return false;
                queue1.add(tmp1.left);
                queue1.add(tmp1.right);
                queue2.add(tmp2.right);
                queue2.add(tmp2.left);
            }
        }
        return true;
    }
}

相关标签: 算法