模仿先序递归遍历方法建立二叉树
时间: 2023-06-11 20:09:36 浏览: 131
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历
5星 · 资源好评率100%
建立二叉树时,可以采用先序遍历的方法,即根节点 -> 左子树 -> 右子树的顺序来构建二叉树。具体步骤如下:
首先,定义二叉树的结构体,包括节点的值、左子树和右子树指针:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
然后,定义一个递归函数,该函数根据先序遍历的顺序建立二叉树。具体过程如下:
1. 如果当前节点的值为-1,表示该节点为空,则返回NULL。
2. 创建一个新节点,将当前节点的值赋给新节点。
3. 递归建立左子树,将左子树的根节点指针赋给当前节点的左子树指针。
4. 递归建立右子树,将右子树的根节点指针赋给当前节点的右子树指针。
5. 返回当前节点的指针。
代码如下:
```c
TreeNode* buildTree(int* arr, int n, int index) {
if (index >= n || arr[index] == -1) {
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = arr[index];
root->left = buildTree(arr, n, 2 * index + 1);
root->right = buildTree(arr, n, 2 * index + 2);
return root;
}
```
其中,arr为先序遍历结果存储数组,n为数组长度,index为当前节点在数组中的下标。
最后,我们可以通过调用这个函数来建立二叉树,例如:
```c
int arr[] = {1, 2, 3, -1, -1, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
TreeNode* root = buildTree(arr, n, 0);
```
这段代码将建立如下的二叉树:
```
1
/ \
2 3
/ \
4 5
```
阅读全文