c语言根据输入的二叉链表先根遍历序列给二叉树链表赋值
时间: 2024-12-09 16:16:18 浏览: 14
在C语言中,给定一个先序遍历序列(二叉链表表示的),你可以通过递归的方式来构建一个二叉树。这里是一个简单的步骤:
1. **函数声明**:首先,你需要创建一个函数,比如`buildTree()`,它接受先序遍历的指针作为参数。
```c
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* buildTree(int* preorder, int len);
```
2. **基础情况**:如果序列为空,返回空指针表示空树。
```c
if (len == 0) return NULL;
```
3. **找到根节点**:在先序遍历中,根节点总是第一个元素。创建一个新的节点,并将当前的第一个元素赋值给它。
```c
TreeNode* root = malloc(sizeof(TreeNode));
root->val = preorder[0];
```
4. **递归左子树和右子树**:对剩余的序列(去掉已选择的根节点)应用同样的过程,分别构建左子树和右子树。
```c
int index = 1; // 跳过根节点
root->left = buildTree(preorder + index, len - index - 1);
index += root->left ? 1 : 0; // 如果左子树存在,index跳过其占用的位置
root->right = buildTree(preorder + index, len - index);
```
5. **释放内存**:记得在完成操作后,释放不需要的临时数组空间。
完整的函数实现如下:
```c
TreeNode* buildTree(int* preorder, int len) {
if (len == 0) return NULL;
TreeNode* root = malloc(sizeof(TreeNode));
root->val = preorder[0];
int index = 1;
root->left = buildTree(preorder + index, len - index - 1);
index += root->left ? 1 : 0;
root->right = buildTree(preorder + index, len - index);
return root;
}
```
阅读全文