解题报告
二叉树的前序遍历
题目链接:144. 二叉树的前序遍历
解题思路
递归遍历二叉树,按照根节点,左子树,右子树的顺序。
解题代码
class Solution {
vector<int> res;
public:
void dfs(TreeNode* root){
if(root == nullptr){
return;
}
res.push_back(root -> val);
dfs(root -> left);
dfs(root -> right);
}
vector<int> preorderTraversal(TreeNode* root) {
dfs(root);
return res;
}
};
二叉树的中序遍历
题目链接:94. 二叉树的中序遍历
解题思路
与第一题相同,只是改变了遍历的顺序,先左子树,再根节点,右子树。
解题代码
class Solution {
vector<int> res;
public:
void dfs(TreeNode* root){
if(root == nullptr){
return ;
}
dfs(root -> left);
res.push_back(root -> val);
dfs(root -> right);
}
vector<int> inorderTraversal(TreeNode* root) {
dfs(root);
return res;
}
};
二叉树的后序遍历
题目链接:145. 二叉树的后序遍历
解题思路
遍历顺序,先左右子树再根节点。
解题代码
class Solution {
vector<int> res;
public:
void dfs(TreeNode* root){
if(root == nullptr){
return ;
}
dfs(root -> left);
dfs(root -> right);
res.push_back(root -> val);
}
vector<int> postorderTraversal(TreeNode* root) {
dfs(root);
return res;
}
};
二叉树的最大深度
题目链接:104. 二叉树的最大深度
解题思路
递归左右子树,深度 + 1。
解题代码
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == nullptr)
return 0;
return max(maxDepth(root -> right), maxDepth(root -> left)) + 1;
}
};