leetcode 101. Symmetric Tree对称树(递归和迭代)

来源:互联网 发布:js设置input宽度 编辑:程序博客网 时间:2024/06/05 14:11

问题描述:

  Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

递归:

/** * 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(root == null) return true;        return isEqual(root, root);    }    public boolean isEqual(TreeNode left, TreeNode right){        if(left == null && right == null) return true;        if(left == null || right == null) return false;        if(left.val != right.val) return false;        return (isEqual(left.left, right.right) && isEqual(left.right, right.left));    }}

迭代:

  先入先出,利用queue队列进行处理。要注意到的是,不能因为结点为空就跳过不add,因为要判断是否对称。

/** * 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(root == null) return true;        Queue<TreeNode> q = new LinkedList<>();        q.add(root.left);        q.add(root.right);        while(q.size() > 1){            TreeNode left = q.poll();            TreeNode right = q.poll();            if(left == null && right == null) continue;            if(left == null || right == null) return false;            if(left.val != right.val) return false;            q.add(left.left);            q.add(right.right);            q.add(left.right);            q.add(right.left);        }        return true;    }    }
原创粉丝点击