BM23. 二叉树的前序遍历
描述
示例 1:
示例1
输入:
{1,#,2,3}
输出:
[1,2,3]
C++ 解法, 执行用时: 2ms, 内存消耗: 428KB, 提交时间: 2022-01-25
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: vector<int> res; void dfs(TreeNode* Node){ if(Node == nullptr) return; res.push_back(Node->val); dfs(Node->left); dfs(Node->right); } vector<int> preorderTraversal(TreeNode* root) { // write code here dfs(root); return res; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 432KB, 提交时间: 2022-02-09
/** * 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 */ vector<int> preorderTraversal(TreeNode* root) { // write code here stack<TreeNode*> sta; vector<int> vec; if(root == nullptr) return {}; sta.push(root); while(!sta.empty()){ TreeNode* node = sta.top(); sta.pop(); vec.push_back(node->val); if(node->right) sta.push(node->right); if(node->left) sta.push(node->left); } return vec; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 468KB, 提交时间: 2022-02-08
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /* 方法一:递归 复杂度分析: 时间复杂度为O(N),空间复杂度为O(N)。 该方法在递归过程中需要使用栈空间,在最坏情况下(二叉树退化为链表),空间复杂度为O(N)。 */ vector<int> preorderTraversal1(TreeNode* root) { preorder(root); return pre; } /* 方法二:非递归(利用栈) - 要能熟练写出这种解法! 复杂度分析: 采用非递归算法,但是同样需要遍历每一个元素,故时间复杂度为O(N), 在非递归算法中设置了栈和容器对象用于存放root的值和最后的结果,所以空间复杂度为O(N)。 */ vector<int> preorderTraversal(TreeNode* root) { if(root==NULL){ return pre; } stack<TreeNode*> tmp;//设置栈对象 tmp.push(root);//保存根结点 while(!tmp.empty()){ auto x = tmp.top(); tmp.pop();//出栈 pre.push_back(x->val);//存入容器 if(x->right){ tmp.push(x->right); } if(x->left){ tmp.push(x->left); } } return pre; } private: vector<int> pre; void preorder(TreeNode* root){//中左右 if(root == NULL) return ; pre.push_back(root->val);//在Vector最后添加一个元素(参数为要插入的值) preorder(root->left); preorder(root->right); } };
C++ 解法, 执行用时: 2ms, 内存消耗: 488KB, 提交时间: 2022-03-13
/** * 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 */ vector<int> preorderTraversal(TreeNode* root) { // write code here vector<int> res; if(root) pre_view(root,res); return res; } void pre_view(TreeNode *root,vector<int>&res) { res.emplace_back(root->val); if(root->left) pre_view(root->left, res); if(root->right) pre_view(root->right, res); } };
C 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-08-02
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; * * C语言声明定义全局变量请加上static,防止重复定义 */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型一维数组 * @return int* returnSize 返回数组行数 */ int i=0; int a[]; void pre(struct TreeNode* root,int*a) { if(root!=NULL) { a[i]=root->val; i++; pre(root->left,a); pre(root->right,a); } } int* preorderTraversal(struct TreeNode* root, int* returnSize ) { pre(root,a); * returnSize=i; return a; }