101. 对称二叉树

题目:给定一个二叉树,检查它是否是镜像对称的。
解法一:递归
思路:递归判断根节点的左右子树p,q是否是对称二叉树
代码:
/**

  • Definition for a binary tree node.

  • public class TreeNode {

  • int val;
    
  • TreeNode left;
    
  • TreeNode right;
    
  • TreeNode(int x) { val = x; }
    
  • }
    */
    class Solution {
    public boolean isSymmetric(TreeNode root) {
    return check(root,root);
    }

    public boolean check(TreeNode p,TreeNode q){
    if(pnull&&qnull){
    return true;
    }
    if(pnull||qnull){
    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(int x) { val = x; }
    
  • }
    */
    class Solution {
    public boolean isSymmetric(TreeNode root) {
    if(rootnull){
    return true;
    }
    Queue queue = new LinkedList();
    queue.offer(root);
    queue.offer(root);
    while(!queue.isEmpty()){
    TreeNode t1 = queue.poll();
    TreeNode t2 = queue.poll();
    if(t1
    null&&t2null){
    continue;
    }
    if(t1
    null||t2==null){
    return false;
    }
    if(t1.val!=t2.val){
    return false;
    }
    queue.offer(t1.left);
    queue.offer(t2.right);
    queue.offer(t1.right);
    queue.offer(t2.left);
    }
    return true;
    }
    }
posted @ 2020-12-02 16:35  for_ward  阅读(51)  评论(0)    收藏  举报