SymmetricTree

来源:互联网 发布:cad线切割编程软件 编辑:程序博客网 时间:2024/06/08 01:00

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

方法1:先求镜像,然后比较二者是否是相同树;

方法2:中序遍历,然后比较对称节点,比较的时候除了比较节点值外还要比较该节点左右子树的值是否对称,否则,如{1,2,3,#,2,#}会报错;

代码如下:

    void Inorder(TreeNode *root, vector<TreeNode *> &ivals)    {        if(root == NULL)            return;        Inorder(root->left, ivals);        ivals.push_back(root);        Inorder(root->right, ivals);    }    bool isequal(TreeNode *node1, TreeNode *node2)    {        if((node1 == NULL&&node2 != NULL)||(node1 != NULL&&node2 == NULL))            return false;        if(node1==NULL&&node2 == NULL)            return true;        if(node1->val == node2->val)            return true;        return false;    }    bool isSymmetric(TreeNode *root) {        if(root == NULL)            return true;        vector<TreeNode *> vals;        Inorder(root, vals);        int len = vals.size();        for(int i = 0;i<len/2;i++)        {            if(vals[i]->val == vals[len-1-i]->val)            {                bool eq1 = isequal(vals[i]->left, vals[len-1-i]->right);                bool eq2 = isequal(vals[i]->right, vals[len-1-i]->left);                if(eq1&&eq2)                    continue;                else                    return false;            }            else            {                return false;            }        }        return true;    }

方法3:层序遍历,构建队列,然后比较每层是否对称。

0 0
原创粉丝点击