代码随想录_226翻转二叉树、101对称二叉树
leetcode 226. 翻转二叉树
226. 翻转二叉树
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2:
输入:root = [2,1,3] 输出:[2,3,1]示例 3:
输入:root = [] 输出:[]
代码
// leetcode 226翻转二叉树
// 使用层序遍历的方法 依次翻转左右子树
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr)
{
return root;
}
queue<TreeNode*> treeQue;
treeQue.push(root);
TreeNode* cur;
while (!treeQue.empty())
{
cur = treeQue.front();
treeQue.pop();
//先入队 再交换
if (cur->left != nullptr)
{
treeQue.push(cur->left);
}
if (cur->right != nullptr)
{
treeQue.push(cur->right);
}
swap(cur->left, cur->right);
}
return root;
}
};
leetcode101.对称二叉树
101. 对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
代码
// 迭代
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (root == nullptr)
{
return true;
}
queue<TreeNode*> treeQue;
treeQue.push(root->left); //确定顺序 先左后右
treeQue.push(root->right);
while (!treeQue.empty())
{
TreeNode* tmp1 = treeQue.front();
treeQue.pop();
TreeNode* tmp2 = treeQue.front();
treeQue.pop();
if (tmp1 == nullptr && tmp2 == nullptr)
{
continue;
}
if (tmp1 == nullptr || tmp2 == nullptr)
{
// 上一个if已经排除了都为空的情况
return false;
}
if (tmp1->val != tmp2->val)
{
return false;
}
treeQue.push(tmp1->left);
treeQue.push(tmp2->right);
treeQue.push(tmp1->right);
treeQue.push(tmp2->left);
}
return true;
}
};