线二叉树的先序递归遍历建立二叉树的二叉链表存储结构,并对二叉树进行先序递归遍历
时间: 2025-01-10 10:15:06 浏览: 47
### 实现先序递归遍历创建二叉树的二叉链表表示
为了实现基于先序递归遍历构建二叉树的二叉链表存储结构,并对其执行先序递归遍历,可以按照如下方法进行:
#### 定义二叉树节点结构
定义一个二叉树节点的数据结构,在C语言中通常使用`struct`来完成这一工作。
```c
typedef struct TreeNode {
int data;
struct TreeNode *left, *right;
} TreeNode;
```
#### 创建二叉树函数
通过先序序列和中序序列重建二叉树的关键在于找到根节点的位置。在先序序列中的第一个元素总是当前子树的根节点;而在中序序列中查找这个根节点位置则可以帮助划分出左右子树范围[^1]。
```c
TreeNode* createBinaryTree(int preOrder[], int inOrder[], int n) {
if (n == 0) return NULL;
// 构建新的树节点作为根节点
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = preOrder[0];
// 查找根节点在中序数组里的索引
int i;
for (i = 0; i < n && inOrder[i] != root->data; ++i);
// 计算左子树长度
int leftSize = i;
// 递归构造左右子树
root->left = createBinaryTree(preOrder + 1, inOrder, leftSize);
root->right = createBinaryTree(preOrder + leftSize + 1, inOrder + leftSize + 1, n - leftSize - 1);
return root;
}
```
#### 执行先序递归遍历
一旦建立了二叉树之后,就可以很容易地对其进行先序遍历来验证其正确性。
```c
void preorderTraversal(TreeNode* node) {
if (!node) return;
printf("%d ", node->data); // 输出访问到的数据项
preorderTraversal(node->left); // 遍历左子树
preorderTraversal(node->right); // 遍历右子树
}
```
上述代码展示了如何利用给定的先序和中序遍历结果恢复一棵唯一的二叉树,并对该二叉树进行了简单的先序遍历打印操作[^2]。
阅读全文
相关推荐


















