层序遍历 翻转二叉树 对称二叉树
层序遍历
vector<vector<int>> level_102(TreeNode* root)
{
queue<TreeNode*> qu;
if (root != nullptr)
qu.push(root);
vector<vector<int>> res;
while(!qu.empty())
{
int size = qu.size();
vector<int> vec;
while(size--)
{
TreeNode* temp = qu.front();
qu.pop();
vec.push_back(temp->nValue);
if (temp->pLeft)
qu.push(temp->pLeft);
if (temp->pRight)
qu.push(temp->pRight);
}
res.push_back(vec);
}
return res;
}
翻转二叉树
TreeNode* invertTree2(TreeNode* root)
{
if (root == nullptr) return root;
stack<TreeNode*> sk;
sk.push(root);
while(!sk.empty())
{
TreeNode* node = sk.top();
sk.pop();
swap(node->pLeft, node->pRight);
if(node->pRight) sk.push(node->pRight);
if(node->pLeft) sk.push(node->pLeft);
}
return root;
}
对称二叉树
bool compareLR_101(TreeNode* pLeft, TreeNode* pRight)
{
if (pLeft == nullptr && pRight != nullptr) return false;
else if (pLeft != nullptr && pRight == nullptr) return false;
else if (pLeft == nullptr && pRight == nullptr) return true;
else if (pLeft->nValue != pRight->nValue) return false;
else if (pLeft->nValue == pRight->nValue)
{
bool outter = compareLR_101(pLeft->pLeft, pRight->pLeft);
bool inner = compareLR_101(pLeft->pRight, pRight->pRight);
bool res = false;
if (outter == true && inner == true)
res = true;
return res;
}
return false;
}