本题目构造一棵二叉检索树。要求读入n个整数,以0结束。最后输出这棵树的先序序列。 输入格式: 输入n个整数,以0表示结束,数据间以空格隔开。 输出格式: 输出这棵树的先序序列,以一个空格隔开,结尾也有一个空格。
时间: 2023-09-20 18:06:44 浏览: 149
### 回答1:
以下是 Python 代码实现:
```python
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def insert(root, val):
if root is None:
return Node(val)
if val < root.val:
root.left = insert(root.left, val)
else:
root.right = insert(root.right, val)
return root
def preorder(root):
if root:
print(root.val, end=' ')
preorder(root.left)
preorder(root.right)
# 主程序
root = None
n = int(input())
while n != 0:
root = insert(root, n)
n = int(input())
preorder(root)
```
输入样例:
```
4 2 1 3 6 5 7 0
```
输出样例:
```
4 2 1 3 6 5 7
```
### 回答2:
首先,我们需要了解二叉检索树的性质。一棵二叉检索树(Binary Search Tree)是一棵空树或具有如下性质的二叉树:
1. 若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;
2. 若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值;
3. 它的左右子树也分别为二叉检索树。
根据这个性质,我们可以逐个读入n个整数,并构造一棵二叉检索树。具体步骤如下:
1. 创建一个空的二叉检索树;
2. 读入第一个整数,作为根结点;
3. 依次读入剩下的n-1个整数,将它们插入到二叉检索树中的合适位置;
4. 输出二叉检索树的先序序列。
以下是具体的实现代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def insert(root, val):
if root is None:
return TreeNode(val)
if val < root.val:
root.left = insert(root.left, val)
else:
root.right = insert(root.right, val)
return root
def preorder(root):
if root is None:
return ''
return str(root.val) + ' ' + preorder(root.left) + preorder(root.right)
# 主程序
n = int(input("输入整数的个数:"))
nums = list(map(int, input("输入整数,以空格隔开:").split()))
tree = None
for num in nums:
if num == 0:
break
tree = insert(tree, num)
result = preorder(tree)
print(result)
```
因为输入格式限定了整数以空格分隔,所以输出也需要以空格分隔。最后的输出结果包含一个空格,符合要求。
### 回答3:
思路:
1. 首先创建一个空的二叉检索树。
2. 读入第一个整数作为根节点的值。
3. 遍历剩余的整数,依次插入到二叉检索树中。
4. 根据二叉检索树的特性,插入操作时,比当前节点小的数应该插入到左子树,比当前节点大的数应该插入到右子树。
5. 输出二叉检索树的先序序列。
代码实现:
```python
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert(root, value):
if root is None:
return Node(value)
if value < root.value:
root.left = insert(root.left, value)
else:
root.right = insert(root.right, value)
return root
def preorder_traversal(root):
if root is None:
return ''
result = str(root.value) + ' '
result += preorder_traversal(root.left)
result += preorder_traversal(root.right)
return result
if __name__ == '__main__':
nums = input().split()
num_list = list(map(int, nums))
root = None
for num in num_list:
if num == 0:
break
root = insert(root, num)
result = preorder_traversal(root)
print(result)
```
该程序首先创建了一个空的二叉检索树,然后根据输入的整数,依次插入到二叉检索树中。最后输出二叉检索树的先序序列。
阅读全文