判断二叉树是否对称
/*
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 isMirror(pRoot->left,pRoot->right);
}
bool isMirror(TreeNode* t1, TreeNode* t2){
if(t1 == NULL && t2 == NULL){
return true;
}
if(t1 == NULL ||t2 == NULL)
return false;
if(t1->val != t2->val){
return false;
}
return (isMirror(t1->left,t2->right)) && (isMirror(t1->right,t2->left));
}
};
层序遍历二叉树,二叉树的每层节点按行输出
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > vec;
vector<int> vec2;
if (pRoot == NULL)
return vec;
int nextLevel = 1;
int tobePrint = 1;
queue<TreeNode*> q;
q.push(pRoot);
while (!q.empty())
{
tobePrint = nextLevel;
nextLevel = 0;
vec2.clear();
while (tobePrint--)
{
TreeNode* pCur = q.front();
vec2.push_back(pCur->val);
if (pCur->left != NULL)
{
q.push(pCur->left);
++nextLevel;
}
if (pCur->right != NULL)
{
q.push(pCur->right);
++nextLevel;
}
q.pop();
}
vec.push_back(vec2);
}
return vec;
}
};