102. Binary Tree Level Order Traversal
vector<int>()
it is basically constructor of std::vector
class and will create a new empty vector.
You can also mention the size of required vector in brackets.
访问二维vector的元素: 如果指定外层和内层向量的大小,就可用operator[]进行读和写;如果只指定外层向量大小,就能用push_back()函数进行写,不能用operator[]进行读和写
下面这行不理解主要是因为不了解vector怎么使用,vector是可以自动变长度的数组当存心的元素进来的时候,但是没存进来的时候空的vector还是空的vector不能直接[]取后面的数,这时候就会越界,二维vector的水平方向可以一直加元素,竖直方向也可以一直加元素,但是加元素之前不能用operator取
if (result.size() == depth) result.push_back(vector<int>());
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void tranversal(TreeNode* current, vector<vector<int>> &result, int depth) {
if(current == NULL) return;
if (result.size() == depth) result.push_back(vector<int>()); //这句话的意思是插入一行空的vector
result[depth].push_back(current->val);
tranversal(current-> left, result, depth+1);
tranversal(current-> right, result, depth+1);
}
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result; //这一句没堆result定义是几行几列,在上面用result[depth]的时候无法直接用,因为depth一直在加一
int depth = 0;
tranversal(root, result, depth);
return result;
}
};
226. Invert Binary Tree
注意这里交换的是指针不是数值,指针的意思就是交换的时候下面的左右孩子跟着一起过去
The swap()
function in C++, from the standard library, is a function that directly swaps values between two given variables of the same types. Let us look at the syntax for using the same: root->left 与root->right都是地址,所以我们这里swap()交换的也是地址
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == NULL) return root;
//swap(root->left->val, root->right->val);交换指针,就是节点之后的所有孩子都跟着一起交换
swap(root->left, root->right);
invertTree(root->left);
invertTree(root->right);
return root;
}
};
101. 对称二叉树
看答案好理解,但是写不出来,需要分几类讨论各种情况