构造利用二叉链表存储表示的二叉树
时间: 2023-10-03 13:04:48 浏览: 98
二叉链表存储表示的二叉树是用链式存储结构来表示二叉树的一种方法。每个节点都有三个部分:数据域、左子节点指针和右子节点指针。其中,左右子节点指针分别指向当前节点的左子节点和右子节点,如果当前节点没有左子节点或右子节点,则对应指针为 NULL。
下面是一个示例代码:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点结构体
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 构造二叉树
TreeNode* buildTree(int arr[], int i, int n) {
if (i >= n) {
return NULL;
}
TreeNode* root = new TreeNode(arr[i]);
root->left = buildTree(arr, 2 * i + 1, n);
root->right = buildTree(arr, 2 * i + 2, n);
return root;
}
// 中序遍历二叉树
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
TreeNode* root = buildTree(arr, 0, n);
inorderTraversal(root);
return 0;
}
```
在上面的代码中,我们首先定义了一个二叉树节点结构体 `TreeNode`,包含了节点的数据域 `val`,左子节点指针 `left` 和右子节点指针 `right`。然后我们通过 `buildTree` 函数构造了一棵二叉树,这个函数采用递归的方式构造二叉树,如果当前节点没有左子节点或右子节点,则返回 NULL。最后,我们通过中序遍历函数 `inorderTraversal` 输出二叉树的中序遍历结果。
这里需要注意的是,我们的二叉树是通过数组来构建的,数组中的元素按照层序遍历的顺序排列。节点的索引从 0 开始,左子节点的索引为 2 * i + 1,右子节点的索引为 2 * i + 2。
阅读全文