题目
给你二叉树的根节点 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 herevector<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 herevector<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 herevector<int> ret;// 递归调用后序遍历postorder(root, ret);return ret;}
};