1,判断二叉树是否对称
题目解析:二叉树对称的意思就是和它的镜像二叉树一样,,就类似于下面这样
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
if (pRoot == NULL)
return true;
return _isSymmetrical(pRoot->left, pRoot->right);
}
bool _isSymmetrical(TreeNode * left, TreeNode* right)
{
if (left == NULL)//如果左边为空,去看右边,都为空返回true,否则返回false
return right == NULL;
if (right == NULL)//这时左边不为空,但是右边是空,那就直接返回假
return false;
if (left->val != right->val)//看看左右两边的值是不是一样,不一样就返回值假了
return false;
//将左节点的左孩子和右节点的右孩子进行比较,将左节点的右孩子和右节点的左孩子比较
return _isSymmetrical(left->left, right->right) && _isSymmetrical(left->right, right->left);
}
};
2,按层打印二叉树
解题思路:
每次将树的一层入队列,然后将这一层节点全部出队列,并同时将每个元素的值入vector,同时将每个元素的左右节点入队列。
#include<queue>
#include<vector>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
//1,判空
//要先建立一个大vector要不然没法返回
vector<vector<int>> V;
if (pRoot == NULL)
return V;
//2,创建大vector 和小vector 和 queue
vector<int> v;
queue<TreeNode*> q;
TreeNode* pCur = NULL;
//3,非递归层序遍历
q.push(pRoot);
while (!q.empty())
{
int size = q.size();//队列有几个元素就出几次队列,处理一层
for (int i = 0; i < size; i++)
{
pCur = q.front();
q.pop();
if (pCur->left)
q.push(pCur->left);
if (pCur->right)
q.push(pCur->right);
v.push_back(pCur->val);
}
V.push_back(v);
v.clear();
}
return V;
}
};