①给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
/**
* 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:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans; //动态数组存储最后答案
preorder(root,ans); //从根节点开始前序遍历
return ans;
}
private:
//定义前序遍历函数,ans应为传引用而非传指针(通过引用可直接修改ans)
void preorder(TreeNode* root, vector<int> &ans)
{
if(root)
{
ans.push_back(root->val);//访问根结点
preorder(root->left,ans); //递归遍历左子树
preorder(root->right,ans); //递归遍历右子树
}
}
};
②给你二叉树的根节点 root
,返回它节点值的 中序 遍历。
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
inorder(root,ans);
return ans;
}
private:
void inorder(TreeNode* root, vector<int> & ans)
{
if(root)
{
inorder(root->left,ans);
ans.push_back(root->val);
inorder(root->right,ans);
}
}
};
③给你二叉树的根节点 root
,返回它节点值的 后序 遍历。
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> ans;
postorder(root,ans);
return ans;
}
private:
void postorder(TreeNode* root, vector<int> &ans)
{
if(root)
{
postorder(root->left,ans);
postorder(root->right,ans);
ans.push_back(root->val);
}
}
};