持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
一、题目描述
给你二叉树的根节点 root ,返回它节点值的前序遍历。
示例 1:
输入: root = [1,null,2,3]
输出: [1,2,3]
示例 2:
输入: root = []
输出: []
示例 3:
输入: root = [1]
输出: [1]
提示:
- 树中节点数目在范围
[0, 100]内 -100 <= Node.val <= 100
二、思路分析
这同样是一道简单题,考验了二叉树这一基本的算法内容。给了二叉树的根节点,要求返回节点值的前序遍历。要解出这道题,首先需要对二叉树的前序遍历、中序遍历和后序遍历有所了解。然后才能够根据它们对应的特点进行编程。
前序遍历遵循中左右的遍历规律。首先从根节点开始,记下根节点,然后看是否有左节点。如果有,则遍历左节点。其操作为将左节点视为根节点,记下左节点,并再次看否有左节点,如有,则继续将其视为根节点并记下,往下循环。如果没有,则看是否有右节点,如有,记下该右节点。如果没有,则返回到到上上层,以此类推。
三、AC代码
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& vec) //定义遍历函数,传入根节点以及要记录结果的容器类
{
if (cur == NULL) return; //若以当前节点为根节点的树为空,则退出当前节点的遍历
vec.push_back(cur->val); // 首先记录根节点
traversal(cur->left, vec); // 左
traversal(cur->right, vec); // 右
}
vector<int> preorderTraversal(TreeNode* root)
{vector<int> result;
traversal(root, result);
return result;
}
};
四、总结
二叉树是算法中的基本内容。掌握它是十分有必要的。另外,除了理论上的知识,我们也应该多动手尝试,这样才能彻底掌握。