题目
给你二叉树的根节点 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; } };
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。