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.

 

C++代码实现:

#include<iostream>

#include<new>

#include<vector>

using namespace std;



//Definition for binary tree

struct TreeNode

{

    int val;

    TreeNode *left;

    TreeNode *right;

    TreeNode(int x) : val(x), left(NULL), right(NULL) {}

};



class Solution

{

public:

    bool isSymmetric(TreeNode *root)

    {

        if(root==NULL)

            return true;

        return isSubtree(root->left,root->right);

    }

    bool isSubtree(TreeNode *root1,TreeNode *root2)

    {

        if(root1==NULL||root2==NULL)

            return (root1==NULL)&&(root2==NULL);

        return (root1->val==root2->val)&&isSubtree(root1->left,root2->right)&&isSubtree(root1->right,root2->left);

    }

    void createTree(TreeNode *&root)

    {

        int i;

        cin>>i;

        if(i!=0)

        {

            root=new TreeNode(i);

            if(root==NULL)

                return;

            createTree(root->left);

            createTree(root->right);

        }

    }

};



int main()

{

    Solution s;

    TreeNode *root;

    s.createTree(root);

    cout<<s.isSymmetric(root)<<endl;

}

 

总结:二叉树的相似、同构、镜像,3种类型。。

你可能感兴趣的:(tree)