LeetCode 101. Symmetric Tree

来源:互联网 发布:mac怎么给文件夹重命名 编辑:程序博客网 时间:2024/06/03 15:41

描述

判断一棵树是否对称

解决


利用递归遍历该树,因为需要判断对称性,所以需要传入两个节点参数。

/** * Definition for a binary tree node. * 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)        {            return true;        }        else        {            return judge(root -> left, root -> right);        }    }    bool judge(TreeNode* n1, TreeNode* n2)    {        if (!n1 && !n2)        {            return true;        }        else if ((!n1 && n2) || (n1 && !n2))        {            return false;        }        else        {            return n1 -> val == n2 -> val && judge(n1 -> left, n2 -> right) && judge(n1 -> right, n2 -> left);        }    }};

看到一个队列实现的方法

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    bool isSymmetric(TreeNode* root) {        queue<TreeNode*> que;        if (!root)            return true;        que.push(root);        que.push(root);        TreeNode* l = NULL, *r = NULL;        while (!que.empty())        {            l = que.front();            que.pop();            r = que.front();            que.pop();            if (!l && !r)                continue;            else if ((!l && r) || (!r && l))                return false;            else if (l -> val != r -> val)                return false;            que.push(l -> left);            que.push(r -> right);            que.push(l -> right);            que.push(r -> left);        }        return true;    }};
0 0
原创粉丝点击