按先序次序建立一棵二叉树,输入时,以井号表示空指针。对其进行后序遍历,并统计叶子结点的个数。
时间: 2024-04-30 16:17:54 浏览: 65
假设我们输入的先序序列为 AB#D##CE##,其中井号#表示空节点。
我们可以按照先序序列逐个插入节点,遇到井号则返回上一级节点,直到找到一个空闲的子节点插入。具体建树过程如下图所示:
```
A
/ \
B C
\
D
\
E
```
接下来进行后序遍历,遍历的顺序为 左子树 -> 右子树 -> 根节点。具体过程如下:
```
左子树:BDE
右子树:C
根节点:A
```
因此,后序遍历的结果为 BDECA,叶子结点的个数为3个,分别是B、D、E。
相关问题
按先序次序建立一棵二叉树,输入时,以井号表示空指针。对其进行后序遍历,并统计叶子结点的个数。C语言实现
以下是基于递归实现的C代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct Node {
char data;
struct Node* left;
struct Node* right;
} Node;
Node* createTree() {
char ch;
Node* root;
scanf("%c", &ch);
if (ch == '#') {
root = NULL;
} else {
root = (Node*)malloc(sizeof(Node));
root->data = ch;
root->left = createTree();
root->right = createTree();
}
return root;
}
int postOrder(Node* root) {
if (root == NULL) {
return 0;
}
int left = postOrder(root->left);
int right = postOrder(root->right);
if (root->left == NULL && root->right == NULL) {
return left + right + 1;
} else {
return left + right;
}
}
int main() {
Node* root = createTree();
int leafNum = postOrder(root);
printf("叶子节点个数为:%d\n", leafNum);
return 0;
}
```
输入示例:`AB#C##DE#F##G###`
输出示例:`叶子节点个数为:4`
按先序次序建立一棵二叉树,输入时,以井号表示空指针。对其进行后序遍历,并统计叶子结点的个数。 c语言代码
以下是按先序次序建立一棵二叉树,后序遍历并统计叶子节点个数的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 按先序次序建立二叉树
TreeNode* createTree() {
char ch;
scanf("%c", &ch);
if (ch == '#') {
return NULL;
}
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = ch;
node->left = createTree();
node->right = createTree();
return node;
}
// 后序遍历并统计叶子节点个数
int postOrder(TreeNode *root, int *count) {
if (!root) {
return 0;
}
int left = postOrder(root->left, count);
int right = postOrder(root->right, count);
if (!root->left && !root->right) {
(*count)++;
}
printf("%c ", root->val);
return left + right + 1;
}
int main() {
TreeNode *root = createTree();
int count = 0;
printf("后序遍历:");
postOrder(root, &count);
printf("\n叶子节点个数:%d\n", count);
return 0;
}
```
输入样例:
```
AB##C##D##
```
输出样例:
```
后序遍历:BCDA
叶子节点个数:2
```
阅读全文