按前序遍历顺序建立一棵二叉树,返回树根地址Cpp
时间: 2024-12-19 14:19:33 浏览: 10
在 C++ 中,如果你想按前序遍历(根节点 -> 左子树 -> 右子树)的顺序重建一棵二叉树,你可以使用递归的方式实现。假设你有一个存储二叉树结构的节点类,例如 `TreeNode`,它包含 `value`、`left` 和 `right` 三个成员变量。
首先,你需要一个函数来创建一个新的节点,然后是一个函数来根据前序遍历序列重构树:
```cpp
class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 前序遍历重建树的函数
TreeNode* buildTree(vector<int>& preorder) {
if (preorder.empty()) return nullptr; // 如果遍历序列为空,则返回空指针
// 获取当前遍历序列的第一个元素作为根节点值
int root_val = preorder[0];
TreeNode* root = new TreeNode(root_val);
// 从第二个元素开始,找到对应左子树的起始位置
size_t i = 1;
while (i < preorder.size() && preorder[i] != root_val) ++i;
// 现在我们知道root_val之后的子序列是左子树的前序遍历
// 使用递归构建左子树并设置到根的左边
root->left = buildTree(preorder.begin() + 1, preorder.begin() + i);
// 左子树处理完后,剩余部分是右子树的前序遍历
// 同理递归处理右子树,并设置到根的右边
root->right = buildTree(preorder.begin() + i + 1, preorder.end());
return root;
}
```
这个函数接受一个整数向量 `preorder`,表示前序遍历的节点值列表,返回树的根节点。注意,在实际应用中,`vector<int>` 或其他类似容器应事先保存好前序遍历的结果。
阅读全文