力扣题解 - 树 - 对称二叉树
-
题号:101
-
难度:简单
-
思路
- 观察对称树
- 将根节点的树分为左右两个树t1和t2(均无原root节点)
- 只须满足以下条件:即为对称树
- t1根节点=t2根节点
- t1的左树=t2右树&& t1的右树=t2左树
-
实现
-
递归:
/** * 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 isSymmetric(root.left,root.right); } private boolean isSymmetric(TreeNode t1,TreeNode t2){ if (t1==null && t2==null) return true; if (t1==null || t2==null) return false; if (t1.val !=t2.val) return false; return isSymmetric(t1.left,t2.right) && isSymmetric(t1.right,t2.left); } } /** 执行结果 执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户 内存消耗 :37.8 MB, 在所有 Java 提交中击败了23.15%的用户 **/
- 迭代
/** * 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) { Queue<TreeNode> que = new LinkedList<>(); if (root==null) return true; que.add(root.left); que.add(root.right); while (!que.isEmpty()){ TreeNode t1=que.poll(); TreeNode t2=que.poll(); if (t1==null && t2==null) continue; if (t1==null || t2==null) return false; if (t1.val!=t2.val) return false; que.add(t1.left); que.add(t2.right); que.add(t1.right); que.add(t2.left); } return true; } } /** 执行用时 :1 ms, 在所有 Java 提交中击败了51.54%的用户 内存消耗 :36.6 MB, 在所有 Java 提交中击败了70.43%的用户 **/
-