对于给定的二叉树,输出其先序序列、中序序列、后序序列并输出叶子结点数
时间: 2023-04-29 21:03:11 浏览: 150
为了输出给定二叉树的先序序列、中序序列、后序序列,可以使用递归的方法来遍历整个二叉树。具体步骤如下:
1. 先输出当前节点的值,即先序序列。
2. 如果当前节点有左子树,则递归遍历左子树。
3. 输出当前节点的值,即中序序列。
4. 如果当前节点有右子树,则递归遍历右子树。
5. 输出当前节点的值,即后序序列。
输出叶子结点数可以在遍历二叉树的过程中进行统计。具体步骤如下:
1. 如果当前节点是叶子结点,则将叶子结点数加1。
2. 如果当前节点有左子树,则递归遍历左子树。
3. 如果当前节点有右子树,则递归遍历右子树。
最终输出先序序列、中序序列、后序序列和叶子结点数即可。
相关问题
给定先序序列,按照该序列创建对应的二叉树,并输出其先序、中序和后序遍历序列代码
以下是给定先序序列创建二叉树并输出遍历序列的代码:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def build_tree(preorder):
if not preorder:
return None
root_val = preorder.pop(0)
root = TreeNode(root_val)
index = -1
for i, val in enumerate(preorder):
if val > root_val:
break
index = i
root.left = build_tree(preorder[:index+1])
root.right = build_tree(preorder[index+1:])
return root
def preorder_traversal(root):
if not root:
return []
return [root.val] + preorder_traversal(root.left) + preorder_traversal(root.right)
def inorder_traversal(root):
if not root:
return []
return inorder_traversal(root.left) + [root.val] + inorder_traversal(root.right)
def postorder_traversal(root):
if not root:
return []
return postorder_traversal(root.left) + postorder_traversal(root.right) + [root.val]
preorder = [5, 2, 1, 3, 7, 6, 8]
root = build_tree(preorder)
print(preorder_traversal(root)) # [5, 2, 1, 3, 7, 6, 8]
print(inorder_traversal(root)) # [1, 2, 3, 5, 6, 7, 8]
print(postorder_traversal(root)) # [1, 3, 2, 6, 8, 7, 5]
```
其中 `build_tree` 函数根据先序序列创建二叉树,它通过递归地创建左子树和右子树来实现。 `preorder_traversal`、`inorder_traversal` 和 `postorder_traversal` 函数分别输出先序、中序和后序遍历序列,它们也是通过递归实现的。
给定先序序列,按照该序列创建对应的二叉树,并输出其先序、中序和后序遍历序列代码c语言
以下是给定先序序列创建二叉树,并输出先序、中序和后序遍历序列的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 根据先序遍历序列创建二叉树
TreeNode* createTree(char* preOrder, int* index) {
if (preOrder[*index] == '\0' || preOrder[*index] == '#') {
(*index)++;
return NULL;
}
TreeNode* root = malloc(sizeof(TreeNode));
root->val = preOrder[(*index)++];
root->left = createTree(preOrder, index);
root->right = createTree(preOrder, index);
return root;
}
// 先序遍历
void preOrder(TreeNode* root) {
if (root == NULL) return;
printf("%c ", root->val);
preOrder(root->left);
preOrder(root->right);
}
// 中序遍历
void inOrder(TreeNode* root) {
if (root == NULL) return;
inOrder(root->left);
printf("%c ", root->val);
inOrder(root->right);
}
// 后序遍历
void postOrder(TreeNode* root) {
if (root == NULL) return;
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->val);
}
int main() {
char preOrder[] = "ABD##E##C#F##";
int index = 0;
TreeNode* root = createTree(preOrder, &index);
printf("先序遍历结果为:");
preOrder(root);
printf("\n中序遍历结果为:");
inOrder(root);
printf("\n后序遍历结果为:");
postOrder(root);
printf("\n");
return 0;
}
```
输出结果为:
```
先序遍历结果为:A B D E C F
中序遍历结果为:D B E A C F
后序遍历结果为:D E B F C A
```