[力扣]144_二叉树的前序遍历
Posted alimy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[力扣]144_二叉树的前序遍历相关的知识,希望对你有一定的参考价值。
/* 给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 */
方法一:常规递归方式,用C语言实现(根左右)
代码实现:
/** * Note: The returned array must be malloced, assume caller calls free(). */ int length = 0 ; int* ret_val = NULL ; void add_ele(int val) length++; ret_val = (int*)realloc(ret_val,sizeof(int)*length); /*追加动态空间*/ ret_val[length-1] = val; void __preOrder(struct TreeNode* node) if(node==NULL) return; add_ele ( node->val ); __preOrder ( node->left ); __preOrder ( node->right ); int* preorderTraversal(struct TreeNode* root, int* returnSize) if(root==NULL) *returnSize = 0; return NULL; ret_val = malloc(sizeof(int)*1); length = 1; ret_val[0] = root->val; /*根*/ __preOrder(root->left); /*左*/ __preOrder(root->right);/*右*/ *returnSize = length; return ret_val;
提交结果:
/* 执行结果:通过 显示详情 执行用时 :4 ms, 在所有 C 提交中击败了89.42%的用户 内存消耗 :7.8 MB, 在所有 C 提交中击败了56.03%的用户 */
方法2:迭代方法,需要栈辅助空间,改用C++
代码实现:
class Solution public: vector<int> preorderTraversal(TreeNode* root) vector<int> pv ; stack<struct TreeNode*> st ; TreeNode* working_ptr = NULL ; if(root==NULL) return pv; st.push(root); while(st.empty()==false) working_ptr = st.top(); st.pop(); pv.push_back(working_ptr->val); if(working_ptr->right!=NULL) /*根据栈的特性,根左右---那么应该是右孩子先入栈*/ st.push(working_ptr->right); if(working_ptr->left!=NULL) st.push(working_ptr->left); return pv; ;
/* 执行结果:通过 显示详情 执行用时 :8 ms, 在所有 C++ 提交中击败了63.87%的用户 内存消耗 :9 MB, 在所有 C++ 提交中击败了82.75%的用户 */
以上是关于[力扣]144_二叉树的前序遍历的主要内容,如果未能解决你的问题,请参考以下文章
二叉树有关习题整理 144二叉树的前序遍历 100相同的树 101对称二叉树 110平衡二叉树 958二叉树的完全性检验 662二叉树的最大宽度