3. 二叉排序树构造\n【问题描述】编写一程序,按数值建立一棵二叉排序树\n【输入形式】n\n\n a1 a2 ... an\n【输出形式】二叉排序树的中序遍历序列\n【样例
时间: 2023-04-26 18:03:28 浏览: 138
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历
5星 · 资源好评率100%
好的,以下是中文回答:
3. 二叉排序树构造
【问题描述】编写一个程序,按数值建立一个二叉排序树。
【输入形式】
n
a1 a2 ... an
【输出形式】
二叉排序树的中序遍历序列
【样例】
输入:
7
5 6 4 7 2 1 3
输出:
1 2 3 4 5 6 7
【思路分析】
二叉排序树,又称为二叉查找树,是一种特殊的二叉树,它的左子树上所有节点的值都比根节点的值小,右子树上所有节点的值都比根节点的值大。因此,我们可以通过不断比较节点的值,将它们插入到二叉排序树中。
具体地,我们可以先读入一个整数 n,表示接下来要输入的数字个数。然后读入 n 个数字,并将它们依次插入到二叉排序树中。插入的方法是:先将当前节点指向根节点,然后比较当前节点的值和要插入的值的大小关系,如果要插入的值比当前节点的值小,则将当前节点指向左子树,否则将当前节点指向右子树,直到找到一个空节点,将要插入的值插入到该节点上。
插入完成后,我们可以通过中序遍历的方法,得到二叉排序树上所有节点的值,并将它们输出即可。
【参考代码】
以下是 Python 代码实现:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class Solution:
def insertNode(self, root, val):
if not root:
return TreeNode(val)
if val < root.val:
root.left = self.insertNode(root.left, val)
else:
root.right = self.insertNode(root.right, val)
return root
def inorderTraversal(self, root):
if not root:
return []
res = []
res += self.inorderTraversal(root.left)
res.append(root.val)
res += self.inorderTraversal(root.right)
return res
if __name__ == "__main__":
n = int(input())
nums = list(map(int, input().split()))
root = None
s = Solution()
for num in nums:
root = s.insertNode(root, num)
print(" ".join(map(str, s.inorderTraversal(root))))
```
【参考链接】
1. [二叉排序树 - 百度百科](https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%8E%92%E5%BA%8F%E6%A0%91/3467389?fr=aladdin)
阅读全文