您的位置:首页 > 其它

101. Symmetric Tree

2018-01-12 10:30 309 查看

欢迎fork and star:Nowcoder-Repository-github

101. Symmetric Tree

题目

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

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

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

But the following [1,2,2,null,3,null,3] is not:

1
/ \
2   2
\   \
3    3

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

解析

递归和迭代实现

// 101. Symmetric Tree
class Solution_101 {
public:

// 递归调用,同时判断左子树的左节点与右子树的右节点,以及左子树的右节点与右子树的左节点。一旦这两个节点不相等,就返回false。
bool isSymmetricHelp(TreeNode *left, TreeNode* right)
{
if (!left&&!right)
{
return true;
}
if (!left&&right ||left&&!right)
{
return false;
}
if (left->val!=right->val)
{
return false;
}

return isSymmetricHelp(left->left, right->right) && isSymmetricHelp(left->right, right->left);
}

bool isSymmetric(TreeNode *root) {

if (!root)
{
return true;
}
return isSymmetricHelp(root->left, root->right);
}

//非递归实现
//需要:对每一层成对送入队列,出队列比较
bool isSymmetric1(TreeNode* root) {
if (!root)
{
return true;
}
queue<TreeNode*> que;

que.push(root->left);
que.push(root->right);

while (!que.empty())
{
int size = que.size();
while (size)
{
TreeNode* left = que.front();
que.pop();
TreeNode* right = que.front(); //取出成对的元素
que.pop();
size -= 2;
if (!left&&!right)
{
continue;
}
if (!left&&right)
{
return false;
}
if (left&&!right)
{
return false;
}

if (left->val!=right->val)
{
return false;
}
que.push(left->left);
que.push(right->right);
que.push(left->right);
que.push(right->left);
}
}
return true;
}
};

101. Symmetric Tree

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: