您的位置:首页 > 其它

LeetCode 101. Symmetric Tree

2016-10-18 18:41 399 查看

描述

判断一棵树是否对称

解决

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

/**
* 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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode