LeetCode 101. Symmetric Tree

来源:互联网 发布:cnc自动编程软件 编辑:程序博客网 时间:2024/06/09 15:30

分类 :Tree; BFS; DFS 

问题描述:

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

Note:
Bonus points if you could solve it both recursively and iteratively.

方法思路:

方法一:循环方法

利用两个先进先出队列分别存储根节点的左右两边的子节点

预备知识:

Queue 用法:offer() 进队列;poll()出队列;isEmpty()判断是否为空

Queue为抽象类,LinkedList实现了Queue接口,所以定义队列是使用

 Queue<TreeNode> left=new LinkedList<>();

Java代码示例:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public boolean isSymmetric(TreeNode root) {        if(root == null) return true;        Queue<TreeNode> left=new LinkedList<>();        Queue<TreeNode> right=new LinkedList<>();        left.offer(root);        right.offer(root);        while((!left.isEmpty()) && (!right.isEmpty())){           TreeNode pl=left.poll();           TreeNode pr=right.poll();           if(pl.val!=pr.val) return false;           if(pl.left!=null && pr.right!=null){               left.offer(pl.left);               right.offer(pr.right);           }else if((pl.left==null && pr.right!=null) || (pl.left!=null && pr.right==null)) return false;           if(pl.right!=null && pr.left!=null){               left.offer(pl.right);               right.offer(pr.left);           }else if((pl.right!=null && pr.left==null) || (pl.right==null && pr.left!=null))return false;        }        if((left.isEmpty()) && (right.isEmpty())) return true;        return false;    }}

方法二:递归方法

待续。。。。。。

0 0