题目描述
给定二叉树的根节点root,返回它的节点值的前序遍历。
输入输出样例
Input: root = [1,null,2,3]
Output: [1,2,3]
题解
对于二叉树遍历,我们常使用的两种方法:递归、迭代(非递归)
一、递归方法三步走:
确定递归的返回类型与函数参数
- 仅是用于处理数据,因此我们不需要返回数据
- 需要二叉树,并将它的节点存入数组.
- 参数为(TreeNode * root, vector
res) 1
void build(TreeNode* root, vector<int>& res)
确定递归的终止条件
- 当节点为空时,那么本层的递归就结束了
1
if (root == nullptr) return;
- 当节点为空时,那么本层的递归就结束了
确定单层递归的逻辑
- 前序遍历的顺序是:中-》左-》右
- 所以应先取中间节点的值
1
2
3res.push_back(root->val);
build(root->left);
build(root->right);
这样的二叉树前序遍历结束了,完整的代码如下:
1 | class Solution { |
二、前序遍历的迭代法
前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,再将右节点入栈,最后再将左节点入栈。根据这个逻辑,我们可以轻松写出代码。
1 | class Solution { |