二叉树的建立,先序、中序、后序遍历二叉树,求二叉树的深度,求二叉树中叶子结点的个数的C语言代码
时间: 2024-05-12 10:12:27 浏览: 125
c代码-二叉树的建立以及先序、中序、后序遍历C语言实现
二叉树是一种重要的数据结构,它由一个根节点和若干个子节点组成,每个节点最多有两个子节点。以下是关于二叉树的一些常见操作的C语言实现:
1. 二叉树的建立
二叉树的建立可以通过递归的方式实现,具体步骤如下:
```
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* createTree(int data[], int index, int size) {
if (index >= size || data[index] == -1) {
return NULL;
}
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = data[index];
root->left = createTree(data, 2*index+1, size);
root->right = createTree(data, 2*index+2, size);
return root;
}
```
其中,data数组存储了二叉树的节点值,-1表示该节点为空。
2. 先序遍历二叉树
先序遍历二叉树的顺序是:根节点 -> 左子树 -> 右子树。具体实现如下:
```
void preorderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
3. 中序遍历二叉树
中序遍历二叉树的顺序是:左子树 -> 根节点 -> 右子树。具体实现如下:
```
void inorderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%d ", root->val);
inorderTraversal(root->right);
}
```
4. 后序遍历二叉树
后序遍历二叉树的顺序是:左子树 -> 右子树 -> 根节点。具体实现如下:
```
void postorderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val);
}
```
5. 求二叉树的深度
求二叉树的深度可以通过递归的方式实现,具体实现如下:
```
int maxDepth(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
```
6. 求二叉树中叶子结点的个数
求二叉树中叶子结点的个数也可以通过递归的方式实现,具体实现如下:
```
int leafNodeCount(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
int leftCount = leafNodeCount(root->left);
int rightCount = leafNodeCount(root->right);
return leftCount + rightCount;
}
```
以上就是关于二叉树常见操作的C语言实现。下面是相关问题:
阅读全文