LeetCode—101. Symmetric Tree
题目
https://leetcode.com/problems/symmetric-tree/description/
判断一棵二叉树是否是镜像的。
思路及解法
同样,有递归的方法和非递归的方法。非递归使用一个双向对列实现。
这里多说两句,虽然非递归的方法效率不是很高,在做树的题目的时候还是在递归和非递归的方法都在实现一遍,因为递归不容易实现不容易想,出错也不容易改。毕竟要为将来做oj做准备,快速的方法实现不了,一般的方法能实现也行啊===
代码
/**
* 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 recursion(root.left, root.right);
}
public boolean recursion(TreeNode node1, TreeNode node2){
if(node1==null && node2==null) return true;
if(node1==null || node2==null || node1.val!=node2.val) return false;
return recursion(node1.left, node2.right) && recursion(node1.right, node2.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;
Deque<TreeNode> deque = new LinkedList<>();
deque.addFirst(root.left);
deque.addLast(root.right);
TreeNode preNode = null;
TreeNode posNode = null;
while(!deque.isEmpty()){
preNode = deque.pollFirst();
posNode = deque.pollLast();
if(preNode==null && posNode==null) continue;
if(preNode==null || posNode==null || preNode.val!=posNode.val) return false;
deque.addFirst(preNode.right);
deque.addFirst(preNode.left);
deque.addLast(posNode.left);
deque.addLast(posNode.right);
}
return true;
}
}