[力扣]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二叉树的前序遍历

144_二叉树的前序遍历

LeetCode-144-二叉树的前序遍历

二叉树有关习题整理 144二叉树的前序遍历 100相同的树 101对称二叉树 110平衡二叉树 958二叉树的完全性检验 662二叉树的最大宽度

精选力扣500题 第55题 LeetCode 144. 二叉树的前序遍历c++/java详细题解

Leetcode练习(Python):栈类:第144题:二叉树的前序遍历:给定一个二叉树,返回它的 前序 遍历。