TreeNode 结构体定义
首先,你的输入是基于 TreeNode
结构体的二叉树节点定义,它包含一个整数值 val
,以及左右子节点 left
和 right
。
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) {}
};
解决方案详解
递归实现前序遍历
递归是最直接的方式之一,它能清晰地表达前序遍历的顺序:
- 访问当前节点的值。
- 递归遍历左子树。
- 递归遍历右子树。
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
preorder(root, result);
return result;
}
void preorder(TreeNode* node, vector<int>& result) {
if (node == nullptr) {
return;
}
result.push_back(node->val); // 访问根节点
preorder(node->left, result); // 遍历左子树
preorder(node->right, result); // 遍历右子树
}
};
在这个实现中:
preorderTraversal
方法是入口,初始化空的result
向量,并调用preorder
函数。preorder
函数进行实际的递归遍历,将当前节点值加入result
,然后递归处理左右子树。