代码随想录_226翻转二叉树、101对称二叉树

 leetcode 226. 翻转二叉树

​​​226. 翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例 1:

代码随想录_226翻转二叉树、101对称二叉树_第1张图片

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

代码随想录_226翻转二叉树、101对称二叉树_第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 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:

代码随想录_226翻转二叉树、101对称二叉树_第3张图片

输入:root = [1,2,2,null,3,null,3]
输出:false

代码

// 迭代
class Solution {
public:
	bool isSymmetric(TreeNode* root) {
		if (root == nullptr)
		{
			return true;
		}
		queue 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;
	}
};

你可能感兴趣的:(代码随想录,leetcode,算法,leetcode,数据结构)