二叉树的先序遍历
二叉树节点结构
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
先序遍历
vector<int> preorderTraversal(TreeNode* root) {
vector<int> Res; // 保存当前节点值及其左、右子树
TreeNode* p = root;
if (p != nullptr) { // p 不为空时
// p 放入 Res
Res.push_back(p->val);
// p 的左子树放入 Res
vector<int> left_vec = preorderTraversal(p->left);
Res.insert(Res.end(), left_vec.begin(), left_vec.end());
// p 的左子树放入 Res
vector<int> right_vec = preorderTraversal(p->right);
Res.insert(Res.end(), right_vec.begin(), right_vec.end());
}
return Res; // 返回 Res
}