LeetCode-101.Symmetric Tree

来源:互联网 发布:中国 种族歧视 知乎 编辑:程序博客网 时间:2024/06/07 00:01

https://leetcode.com/problems/symmetric-tree/

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

    1   / \  2   2 / \ / \3  4 4  3

But the following is not:

    1   / \  2   2   \   \   3    3

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

非递归解:

/** * Definition for a binary tree node. * public class TreeNode { *     public int val; *     public TreeNode left; *     public TreeNode right; *     public TreeNode(int x) { val = x; } * } */public class Solution {    public bool IsSymmetric(TreeNode root)    {        if (root == null)             return true;        Queue<TreeNode> q = new Queue<TreeNode>();        if (!isEqual(root, root, q))             return false;        TreeNode node1,node2;        int n;        while ((n=q.Count)>0)        {            for (int i = 0; i < n; i+=2)            {                node1 = q.Dequeue();                node2 = q.Dequeue();                if (!isEqual(node1, node2, q))                    return false;                if (!isEqual(node2, node1, q))                    return false;            }        }        return true;    }        private bool isEqual(TreeNode node1, TreeNode node2,Queue<TreeNode> q)    {        if (node1.left != null && node2.right != null)        {            if (node1.left.val != node2.right.val)                return false;            q.Enqueue(node1.left);            q.Enqueue(node2.right);            return true;        }        else if (node1.left == null && node2.right == null)            return true;        else            return false;    }}

递归解:

/** * Definition for a binary tree node. * public class TreeNode { *     public int val; *     public TreeNode left; *     public TreeNode right; *     public TreeNode(int x) { val = x; } * } */public class Solution {    public bool IsSymmetric(TreeNode root)    {        if (root == null)                return true;        return Func(root.left, root.right);    }        private bool Func(TreeNode node1, TreeNode node2)    {        if (node1 == null && node2 == null)            return true;        else if (node1 == null || node2 == null)            return false;        else        {            if (node1.val != node2.val)                return false;            return Func(node1.left, node2.right) && Func(node2.left, node1.right);        }    }}

0 0
原创粉丝点击