题目链接:102. 二叉树的层序遍历
使用队列进行遍历,利用一个变量size来获取每层节点的个数。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
if(root == nullptr) return result;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()) {
size_t size = que.size();
vector<int> vec;
while(size > 0) {
size--;
TreeNode* node = que.front();
que.pop();
vec.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
result.push_back(vec);
}
return result;
}
};
题目链接:226. 翻转二叉树
中序遍历无法得到正确结果,如果是中序遍历,先处理节点的左子树,然后节点交换左右指针,之后处理的右子树就是之前处理完的左子树。
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
reaversal(root);
return root;
}
void reaversal(TreeNode* node) {
if(node == nullptr) return;
reaversal(node->left);
reaversal(node->right);
swap(node->right, node->left);
}
};
题目链接:101. 对称二叉树
同时遍历两个二叉树
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root->right && !root->left) return true;
bool result = true;
reaversal(root->left, root->right, result);
return result;
}
void reaversal(TreeNode* tree_left, TreeNode* tree_right, bool &result) {
if(tree_left == nullptr) {
if(tree_right == nullptr) return;
else {result = false; return;}
}
if(tree_right == nullptr) {
if(tree_left == nullptr) return;
else {result = false; return;}
}
if (tree_left->val != tree_right->val) {
result = false;
return;
}
reaversal(tree_left->right, tree_right->left, result);
reaversal(tree_left->left, tree_right->right, result);
}
};