持续创作,加速成长!这是我参与「掘金日新计划 · 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)。