一个一维数组是二叉树按层序遍历得到的,请写一个cpp函数将这个数组重新构成原来的二叉树
时间: 2024-12-06 18:23:31 浏览: 20
在C++中,我们可以使用递归的方式来实现这个功能。假设我们有一个一维数组`int* arr`,长度为`size`,这个数组是二叉树的层序遍历结果。以下是一个简单的函数,它会根据数组中的值重建二叉树:
```cpp
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* buildTree(int* arr, int start, int end) {
if (start > end) return nullptr; // 根据层序遍历,空指针表示结束
int mid = (start + end) / 2; // 找到中间元素作为根节点
TreeNode* root = new TreeNode(arr[mid]); // 创建新的节点
// 分别对左子树和右子树进行递归构建
root->left = buildTree(arr, start, mid - 1);
root->right = buildTree(arr, mid + 1, end);
return root;
}
```
这个函数的工作原理是从数组的中间元素开始,每次选择一个中间元素作为根,并递归地构建其左右子树。当你调用`buildTree(arr, 0, size - 1)`时,它将返回整个二叉树的根节点。
注意,这个函数假设输入的数组已经按照正确的顺序(即层序遍历的结果)排列好了。
阅读全文