LeetCode-101. Symmetric Tree
2017-10-04 22:08
309 查看
问题描述
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following [1,2,2,null,3,null,3] is not:
1
/ \
2 2
\ \
3 3
解题思路
判断一棵树是不是镜像二叉树,采用从递归和非递归两种解决方式。递归的方式求解,方法类似于LeetCode-100,只不过判断的条件变成:p的值是否等于q的值;p的左子树与q的右子树的翻转是不是相同;p的右子树与q的左子树的翻转是不是相同。
非递归的方式求解。首先将root的左节点p和右节点q放入到队列中(两个节点都不为空),然后从队列中弹出两个节点,判断这两个节点的值是否相同,如果p的左节点和q的右节点同不为null,将这两个节点添加到队列中,如果两个节点不同为null,返回false;如果p的右节点和q的左节点同不为null,将这两个节点添加到队列中,如果两个节点不同为null,返回false。循环,直到队列为空
代码
递归方式/** * 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 isSameTree(root.left,root.right); } private boolean isSameTree(TreeNode p,TreeNode q){ if((p == null && q != null) || (p != null && q == null)) return false; if(p == null && q == null) return true; return p.val == q.val && isSameTree(p.left,q.right) && isSameTree(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(root == null) return true; Queue<TreeNode> queue = new LinkedList<TreeNode>(); if(root.left == null && root.right == null) return true; if((root.left == null && root.right != null) || (root.left != null && root.right == null)) return false; queue.add(root.left); queue.add(root.right); while(queue.peek() != null){ TreeNode left = queue.poll(); TreeNode right = queue.poll(); if(left.val == right.val){ if((left.left == null && right.right != null) || (left.left != null && right.right == null)) return false; if(left.left != null && right.right != null){ queue.add(left.left); queue.add(right.right); } if((left.right == null && right.left != null) || (left.right != null && right.left == null)) return false; if(left.right != null && right.left != null){ queue.add(left.right); queue.add(right.left); } }else{ return false; } } return true; } }
相关文章推荐
- 【LeetCode】101. Symmetric Tree
- [LeetCode]101. Symmetric Tree
- Leetcode 101. Symmetric Tree
- LeetCode解题报告 101. Symmetric Tree [easy]
- leetcode -- 101. Symmetric Tree 【对称树,结构,内容】
- 小白笔记---------------------------------leetcode(101. Symmetric Tree )
- [leetcode] 101. Symmetric Tree 解题报告
- leetcode 101. Symmetric Tree
- leetcode 101. Symmetric Tree-对称二叉数|深度遍历
- leetcode 101. Symmetric Tree
- 个人记录-LeetCode 101. Symmetric Tree
- LeetCode 101. Symmetric Tree
- leetcode 101. Symmetric Tree
- 【一天一道LeetCode】#101. Symmetric Tree
- LeetCode 101. Symmetric Tree
- leetcode - 101. Symmetric Tree
- Leetcode 101. Symmetric Tree
- LeetCode 101. Symmetric Tree
- LeetCode - 101. Symmetric Tree (C++)
- Leetcode 101. Symmetric Tree (Easy) (cpp)