二叉树的前序遍历-二叉树144-C++

算法思想:

没看答案。

  • 利用递归,自顶向下遍历,将非空的节点的val存入到输出数组res中,空节点只返回值而不修改res;
  • 递归函数的返回值无意义,有意义的只是修改res的代码部分;
  • 前序遍历是先添加val,后递归,和后序遍历正好相反。

C++

/**
 * 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> res;

    void nums(TreeNode * root){
        if(root != nullptr){
            res.push_back(root->val);
            nums(root->left);
            nums(root->right);
        }else return;
    }
    
    vector<int> preorderTraversal(TreeNode* root) {
        nums(root);
        return res;
    }
};

复杂度分析:

  • 时间复杂度:O(n),其中 n 是二叉树的节点数。每一个节点恰好被遍历一次。
  • 空间复杂度:O(n),为递归过程中栈的开销,平均情况下为 O(logn),最坏情况下树呈现链状,为 O(n)。

版权声明:本文为VaccyZhu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。