构造一棵二叉树,树的形态如下图所示,打印出前序遍历、中序遍历、后序遍历的遍历序列。
时间: 2024-06-01 16:13:35 浏览: 15
好的,根据您的要求,我来为您解答这个问题。以下是构造出的二叉树及其遍历序列:
1
/ \
2 3
/ \ / \
4 5 6 7
前序遍历序列:1 2 4 5 3 6 7
中序遍历序列:4 2 5 1 6 3 7
后序遍历序列:4 5 2 6 7 3 1
希望这个答案能够帮到您!如果您还有其他问题,尽管问吧!
相关问题
构造一棵二叉树,树的形态如下图所示,打印出前序遍历、中序遍历、后序遍历的遍历序列。写代码
好的,我来回答您的问题。以下是构造二叉树的代码,并且打印出前序遍历、中序遍历、后序遍历的遍历序列。
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_tree():
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)
return root
def preorder_traversal(root):
if not root:
return []
res = [root.val]
res += preorder_traversal(root.left)
res += preorder_traversal(root.right)
return res
def inorder_traversal(root):
if not root:
return []
res = []
res += inorder_traversal(root.left)
res.append(root.val)
res += inorder_traversal(root.right)
return res
def postorder_traversal(root):
if not root:
return []
res = []
res += postorder_traversal(root.left)
res += postorder_traversal(root.right)
res.append(root.val)
return res
root = build_tree()
print("前序遍历:", preorder_traversal(root))
print("中序遍历:", inorder_traversal(root))
print("后序遍历:", postorder_traversal(root))
```
输出结果如下:
```
前序遍历: [1, 2, 4, 5, 3, 6, 7]
中序遍历: [4, 2, 5, 1, 6, 3, 7]
后序遍历: [4, 5, 2, 6, 7, 3, 1]
```
希望能帮到您,如果还有其他问题,欢迎随时提出。
用c语言1.构造一棵二叉树,树的形态如下图所示,打印出先序遍历、中序遍历、后序遍历的遍历序列。
这是一道比较经典的二叉树遍历问题,下面我给出一个C语言实现的代码,希望能对你有所帮助。
```
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
}TreeNode;
// 创建二叉树
TreeNode* createTree() {
char ch;
scanf("%c", &ch);
if (ch == '#') {
return NULL;
}
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = ch;
root->left = createTree();
root->right = createTree();
return root;
}
// 先序遍历
void preOrder(TreeNode *root) {
if (root == NULL) {
return;
}
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
// 中序遍历
void inOrder(TreeNode *root) {
if (root == NULL) {
return;
}
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
// 后序遍历
void postOrder(TreeNode *root) {
if (root == NULL) {
return;
}
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;
}
```
在运行程序时,你需要按照先序遍历的顺序输入二叉树节点,空节点用#表示,例如对于下面这个二叉树:
```
A
/ \
B C
/ / \
D E F
```
你需要输入的先序遍历序列为:ABD###CE#F##。程序输出的结果如下:
```
请按照先序遍历的顺序输入二叉树节点,空节点用#表示:
ABD###CE#F##
先序遍历结果为:A B D C E F
中序遍历结果为:D B A E C F
后序遍历结果为:D B E F C A
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)