Leecode每日一题

106 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

Leecode每日一题:Leecode144

地址为144. 二叉树的前序遍历 - 力扣(LeetCode)
题目描述:给你二叉树的根节点 root ,返回它节点值的 前序遍历
示例一

输入: root = [1,null,2,3]
输出: [1,2,3]

示例二

输入: root = [1]
输出: [1]

二叉树介绍:二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分。---来源百度百科
前序遍历:即先遍历根节点,再遍历左子树节点,再遍历右子树节点。根节点->左子树->右子树
方法:递归
方法描述:根据前序遍历的顺序:根节点->左子树->右子树遍历这个数,当访问左子树或者右子树的时候,我们同样一样的顺序遍历,直到遍历完这棵树。递归的结束条件:当前结点为null 。定义一个root结点,按照定义先将root结点加入结果集,然后递归调用函数,将root.left传入函数来遍历root的左子树,然后递归调用函数,将root.right来遍历root的右子树,直到递归到结束条件。 Java代码

class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result=new ArrayList<>();
dfs(root,result);
return result;
    }
    public  void dfs(TreeNode treeNode,List<Integer> list){
        
        if (treeNode==null){
            return;
        }
      list.add(treeNode.val);
        dfs(treeNode.left,list);
        dfs(treeNode.right,list);
    }
}

C++代码

class Solution {
public:
    void preorder(TreeNode *root, vector<int> &res) {
        if (root == nullptr) {
            return;
        }
        res.push_back(root->val);
        preorder(root->left, res);
        preorder(root->right, res);
    }

    vector<int> preorderTraversal(TreeNode *root) {
        vector<int> res;
        preorder(root, res);
        return res;
    }
};

时间复杂度:O(n),其中 n 是二叉树的节点数。每一个节点恰好被遍历一次。
空间复杂度:O(n),平均情况下为O(logn),最坏情况下为O(n)。