解题思路
首先是前序遍历的节点打印顺序:中左右。这个打印顺序和深度优先搜索寻找解的路径一致。
由于这里采用递归的方式解题,所以应当考虑以下3个问题:
1.检查数据合法性以判断是否到达边界并返回
2.递归重复的主体部分
3.设计递归的参数和返回值
对于二叉树的遍历,边界条件是到达叶节点,值为null,此时应当返回到上一层节点。
if(temp == nullptr)
return;
递归主体是按照左中右顺序遍历节点。传递的参数是子节点地址。
out.push_back(temp->val);
Traversal(temp->left, out);
Traversal(temp->right, out);
完整代码
class Solution {
public:
void Traversal(TreeNode* temp, vector<int>& out)
{
if(temp == nullptr)
return;
out.push_back(temp->val);
Traversal(temp->left, out);
Traversal(temp->right, out);
}
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> out; //定义output数组储存节点
Traversal(root, out); //封装了递归部分
return out;
}
}
参考文章: