题目描述:
判断一个二叉树是否左右对称,比如:
1
/ \
2 2
/ \ / \
3 4 4 3
思路:
对称的条件是:
- 左子树的左子结点等于右子树的右子结点,并且左子树的右子结点等于右子树的左子结点。
递归实现:
public class Solution {
public bool IsSymmetric(TreeNode root) {
if(root == null)
{
return true;
}
return IsSubSymmetric(root.left, root.right);
}
public bool IsSubSymmetric(TreeNode left, TreeNode right)
{
if(left == null && right == null)
{
return true;
}
if(left == null || right == null)
{
return false;
}
return (left.val == right.val) && IsSubSymmetric(left.left, right.right) && IsSubSymmetric(left.right, right.left);
}
}
非递归实现:
public class Solution {
public boolean isSymmetric(TreeNode root)
{
Queue<TreeNode> q = new LinkedList<TreeNode>();
if(root == null) return true;
q.add(root.left);
q.add(root.right);
while(q.size() > 1)
{
TreeNode left = q.poll();
TreeNode right = q.poll();
if(left== null && right == null) { continue; }
if(left == null ^ right == null) { return false; }
if(left.val != right.val) { return false; }
q.add(left.left);
q.add(right.right);
q.add(left.right);
q.add(right.left);
}
return true;
}
}
本文介绍了一种判断二叉树是否左右对称的方法,包括递归和非递归两种实现方式。递归方法通过比较左右子树的节点来判断对称性;非递归方法则使用队列进行逐层节点比较。
486

被折叠的 条评论
为什么被折叠?



