c语言根据二叉树的扩展先序遍历序列创建二叉链表
时间: 2024-11-15 12:25:45 浏览: 56
在C语言中,根据二叉树的扩展先序遍历(即根节点 -> 左子树 -> 右子树)序列创建二叉链表,可以按照递归的方式来实现。首先,我们需要定义二叉树结点结构和一个链表结点结构。
```c
// 定义二叉树结点
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左孩子指针
struct TreeNode* right; // 右孩子指针
} TreeNode;
// 定义链表结点
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
```
然后我们可以编写一个函数,利用扩展先序遍历顺序将节点添加到链表中:
```c
void createListFromPreorder(int preorder[], int n, TreeNode** root) {
if (n == 0) return;
// 创建根节点并链接到链表
ListNode* head = malloc(sizeof(ListNode));
head->val = preorder[0];
head->next = NULL;
// 递归处理左子树和右子树
TreeNode* node = *root = (TreeNode*)malloc(sizeof(TreeNode));
node->val = preorder[0];
node->left = createListFromPreorder(preorder + 1, n - 1, &node->left);
node->right = createListFromPreorder(preorder + 1 + (node->left ? 1 : 0), n - 1 - (node->left ? 1 : 0), &node->right);
// 返回头节点,完成链表构造
return head;
}
```
这个函数接受一个整数数组`preorder`,表示二叉树的扩展先序遍历序列,以及该序列的长度`n`,以及指向当前待处理的根节点的指针。它通过递归地创建左右子树,并将它们连接到根节点的链表上,最终返回链表的头节点。
阅读全文