题目
给你二叉树的根节点 root ,返回它节点值的 前序(中序、后序) 遍历。
数据范围:二叉树的节点数量满足 1≤n≤100 ,二叉树节点的值满足 1≤val≤100 ,树的各节点的值各不相同。
思路
二叉树的前序遍历就是按照“根左右”(中序是“左根右”,后序是“左右根”)的顺序访问其所有节点。可以使用递归的方法:对每个子树的访问,可以看成对于上一级树的子问题,终止条件是节点为空。
解答代码
- 前序遍历:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* @param root TreeNode类
* @return int整型vector
*/
void preorder(TreeNode* node, vector<int>& ret) {
if (node == nullptr) {
return;
}
// 根节点
ret.emplace_back(node->val);
// 左子树
preorder(node->left, ret);
// 右子树
preorder(node->right, ret);
}
vector<int> preorderTraversal(TreeNode* root) {
// write code here
vector<int> ret;
// 递归调用前序遍历
preorder(root, ret);
return ret;
}
};
- 中序遍历
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* @param root TreeNode类
* @return int整型vector
*/
void inorder(TreeNode* node, vector<int>& ret) {
if (node == nullptr) {
return;
}
// 左子树
inorder(node->left, ret);
// 根节点
ret.emplace_back(node->val);
// 右子树
inorder(node->right, ret);
}
vector<int> inorderTraversal(TreeNode* root) {
// write code here
vector<int> ret;
// 递归调用中序遍历
inorder(root, ret);
return ret;
}
};
- 后序遍历
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* @param root TreeNode类
* @return int整型vector
*/
void postorder(TreeNode* node, vector<int>& ret) {
if (node == nullptr) {
return;
}
// 左子树
postorder(node->left, ret);
// 右子树
postorder(node->right, ret);
// 根节点
ret.emplace_back(node->val);
}
vector<int> postorderTraversal(TreeNode* root) {
// write code here
vector<int> ret;
// 递归调用后序遍历
postorder(root, ret);
return ret;
}
};
文章介绍了如何使用递归方法实现二叉树的前序、中序和后序遍历,包括相应的C++代码示例。
357

被折叠的 条评论
为什么被折叠?



