利用先序序列建立二叉树,并输出先序、中序和后序序列
时间: 2023-12-08 09:09:53 浏览: 94
假设先序序列为:1,2,4,5,3,6,7
根据先序序列建立二叉树的步骤:
1. 将1作为根节点。
2. 将2作为1的左子节点。
3. 将3作为1的右子节点。
4. 将4作为2的左子节点。
5. 将5作为2的右子节点。
6. 将6作为3的左子节点。
7. 将7作为3的右子节点。
建立完二叉树后,可以进行先序、中序和后序遍历,结果如下:
先序遍历序列:1 2 4 5 3 6 7
中序遍历序列:4 2 5 1 6 3 7
后序遍历序列:4 5 2 6 7 3 1
注:先序遍历是指先遍历根节点,再遍历左子树和右子树;中序遍历是指先遍历左子树,再遍历根节点和右子树;后序遍历是指先遍历左子树和右子树,再遍历根节点。
相关问题
利用扩充先序序列建立二叉树并输出中序序列和后序序列
好的,这是一个二叉树建立的经典问题。先给你一个简单的方法:
1. 根据扩展先序序列建立二叉树,其中 "#" 表示空节点。
2. 对建立好的二叉树进行中序遍历,输出中序序列。
3. 对建立好的二叉树进行后序遍历,输出后序序列。
具体实现可以采用递归方法:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_tree(preorder: List[str]) -> TreeNode:
if not preorder:
return None
val = preorder.pop(0)
if val == "#":
return None
node = TreeNode(int(val))
node.left = build_tree(preorder)
node.right = build_tree(preorder)
return node
def inorder_traversal(root: TreeNode) -> List[int]:
if not root:
return []
result = []
result += inorder_traversal(root.left)
result.append(root.val)
result += inorder_traversal(root.right)
return result
def postorder_traversal(root: TreeNode) -> List[int]:
if not root:
return []
result = []
result += postorder_traversal(root.left)
result += postorder_traversal(root.right)
result.append(root.val)
return result
```
使用方式:
```python
preorder = ["1", "2", "#", "4", "#", "#", "3", "#", "5", "#", "#"]
root = build_tree(preorder)
inorder = inorder_traversal(root)
postorder = postorder_traversal(root)
print("中序序列:", inorder)
利用先序序列建立二叉树,并输出先序、中序和后序序列,使用c语言
下面是利用先序序列建立二叉树,并输出先序、中序和后序序列的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点结构体定义
typedef struct TreeNode {
char data; // 数据域
struct TreeNode* left; // 左子树指针
struct TreeNode* right; // 右子树指针
} TreeNode;
// 根据先序序列建立二叉树
TreeNode* createTree() {
char data;
scanf("%c", &data);
if (data == '#') {
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = data;
root->left = createTree();
root->right = createTree();
return root;
}
// 先序遍历
void preOrder(TreeNode* root) {
if (root) {
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
}
// 中序遍历
void inOrder(TreeNode* root) {
if (root) {
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
}
// 后序遍历
void postOrder(TreeNode* root) {
if (root) {
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->data);
}
}
int main() {
printf("请输入先序序列(#表示空节点):\n");
TreeNode* root = createTree();
printf("先序遍历结果为:");
preOrder(root);
printf("\n中序遍历结果为:");
inOrder(root);
printf("\n后序遍历结果为:");
postOrder(root);
printf("\n");
return 0;
}
```
示例输入:
```
请输入先序序列(#表示空节点):
AB#C##DE###
```
示例输出:
```
先序遍历结果为:A B C D E
中序遍历结果为:B A C E D
后序遍历结果为:B C E D A
```
阅读全文