题目链接:https://leetcode-cn.com/problems/symmetric-tree/
题目解析
核心是判断这个二叉树的左右节点对应的值是否相等,left.right==right.left && left.left == right.right
就意味着是符合规则的二叉树。
- 采用递归的思路进行判断
public boolean isSymmetric(TreeNode root) {
return check(root.left,root.right);
}
private boolean check(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;
}
//left.right==right.left && left.left == right.right 判断
return check(left.left,right.right) && check(left.right,right.left);
}
复杂度分析
空间复杂度: O(N)。
时间复杂度: O(N)。
- 采用递归加辅助队列的方式进行处理
public boolean isSymmetric(TreeNode root) {
return check(root.left,root.right);
}
private boolean check(TreeNode left,TreeNode right){
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(left);
queue.offer(right);
while (!queue.isEmpty()){
TreeNode p = queue.poll();
TreeNode q = queue.poll();
//某一个节点到底了
if (p == null && q == null){
continue;
}
if (p==null || q ==null){
return false;
}
if (p.val != q.val){
return false;
}
queue.offer(p.left);
queue.offer(q.right);
queue.offer(p.right);
queue.offer(q.left);
}
return true;
}
复杂度分析
空间复杂度: O(N)。
时间复杂度: O(N)。
网友评论