如果以根为中心,整棵树关于根对称的,则返回true,否则为false
递归版:
public static bool IsSymmetric(TreeNode root)
{
if (root == null) return true;
return IsSymmetric(root.Left,root.Right);
}
public static bool IsSymmetric(TreeNode p,TreeNode q)
{
if (p == null && q == null) return true;
if (p == null || q == null) return false;
return p.value == q.value && IsSymmetric(p.Left, q.Right) && IsSymmetric(p.Right, q.Left);
}
迭代版:
public static bool IsSymmetricForCSharp(TreeNode root)
{
if (root == null) return true;
Stack<TreeNode> s = new Stack<TreeNode>();
s.Push(root.Left);
s.Push(root.Right);
while (s.Count > 0)
{
TreeNode p = s.Pop();
TreeNode q = s.Pop();
if (p == null && q == null) return true;
if (p == null || q == null) return false;
if (p.value != q.value) return false;
s.Push(p.Left);
s.Push(q.Right);
s.Push(q.Left);
s.Push(p.Right);
}
return true;
}