101. 对称二叉树 简单 递归 迭代
Published on 2022-11-17 23:01 in 暂未分类 with 林动

101. 对称二叉树 简单 递归 迭代

    1. 对称二叉树
      给你一个二叉树的根节点 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);
        }
        
        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);
        }
    }
    
    迭代解法(广度有限搜索)
    import java.util.LinkedList;
    import java.util.Queue;
    
    class Solution {
        public boolean isSymmetric(TreeNode root) {
        	Queue<TreeNode> q=new LinkedList<>();
        	Queue<TreeNode> p=new LinkedList<>();
        	q.offer(root);
        	p.offer(root);
        	while(!q.isEmpty()){
        		TreeNode x=p.poll();
        		TreeNode y=q.poll();
        		if(x==null&&y==null)continue;
        		if(x==null&&y!=null)return false;
        		if(y==null&&x!=null)return false;
        		if(x.val!=y.val)return false;
        		p.offer(x.left);p.offer(x.right);
        		q.offer(y.right);q.offer(y.left);
        	}
            return true;
        }
    }
    

    可以只用一个队列,按顺序出队即可

    class Solution {
        public boolean isSymmetric(TreeNode root) {
            return check(root, root);
        }
    
        public boolean check(TreeNode u, TreeNode v) {
            Queue<TreeNode> q = new LinkedList<TreeNode>();
            q.offer(u);
            q.offer(v);
            while (!q.isEmpty()) {
                u = q.poll();
                v = q.poll();
                if (u == null && v == null) {
                    continue;
                }
                if ((u == null || v == null) || (u.val != v.val)) {
                    return false;
                }
    
                q.offer(u.left);
                q.offer(v.right);
    
                q.offer(u.right);
                q.offer(v.left);
            }
            return true;
        }
    }
    
    
    
    posted @   林动  阅读(3)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 终于写完轮子一部分:tcp代理 了,记录一下
    · 震惊!C++程序真的从main开始吗?99%的程序员都答错了
    · 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
    · 单元测试从入门到精通
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    点击右上角即可分享
    微信分享提示