C语言生成代码二叉树建立、中序遍历、叶子结点及深度
时间: 2023-07-10 19:10:34 浏览: 103
C语言二叉树的三种遍历方式的实现及原理
5星 · 资源好评率100%
好的,我可以为您解答有关C语言生成代码二叉树建立、中序遍历、叶子结点及深度的问题。
首先,我们需要定义一个二叉树结构体,其包含一个整型数据域(用于存储节点的值)、一个指向左子树的指针和一个指向右子树的指针。具体定义如下:
```
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
接下来,我们可以通过递归方式来建立二叉树。具体实现如下:
```
TreeNode* createBinaryTree() {
TreeNode *root;
int data;
scanf("%d", &data);
if (data == -1) { // 如果输入的数据为-1,则表示该节点为空
root = NULL;
} else {
root = (TreeNode*) malloc(sizeof(TreeNode));
root->data = data;
root->left = createBinaryTree(); // 递归建立左子树
root->right = createBinaryTree(); // 递归建立右子树
}
return root;
}
```
其中,输入的数据以-1为结束标志,表示该节点为空。
建立好二叉树后,我们可以通过中序遍历来遍历二叉树。中序遍历的具体实现如下:
```
void inOrderTraversal(TreeNode *root) {
if (root != NULL) {
inOrderTraversal(root->left); // 递归遍历左子树
printf("%d ", root->data); // 输出节点的值
inOrderTraversal(root->right); // 递归遍历右子树
}
}
```
中序遍历的输出顺序是左子树、当前节点、右子树。
接下来,我们可以通过递归方式来计算二叉树的深度。具体实现如下:
```
int getTreeDepth(TreeNode *root) {
if (root == NULL) {
return 0;
} else {
int leftDepth = getTreeDepth(root->left); // 计算左子树的深度
int rightDepth = getTreeDepth(root->right); // 计算右子树的深度
return 1 + (leftDepth > rightDepth ? leftDepth : rightDepth); // 返回深度较大的值加1
}
}
```
最后,我们可以通过递归方式来计算二叉树的叶子节点个数。具体实现如下:
```
int getLeafCount(TreeNode *root) {
if (root == NULL) {
return 0;
} else if (root->left == NULL && root->right == NULL) { // 如果当前节点没有左右子树,则为叶子节点
return 1;
} else {
return getLeafCount(root->left) + getLeafCount(root->right); // 递归计算左右子树的叶子节点个数之和
}
}
```
以上就是C语言生成代码二叉树建立、中序遍历、叶子结点及深度的实现方法。希望能对您有所帮助。
阅读全文