从空二叉树开始,严格按照二叉查找树的插入算法,逐个插入关键字{18,73,10,5,68,99,27,41,32,25}构造一颗二叉排序树,则对该二叉排序树进行先序遍历的序列为?
时间: 2023-09-20 19:03:07 浏览: 34
先序遍历的顺序是:根节点 -> 左子树 -> 右子树。
按照二叉查找树的插入算法,我们可以依次插入关键字{18,73,10,5,68,99,27,41,32,25},得到如下二叉排序树:
```
18
/ \
10 73
/ / \
5 68 99
/ /
27 41
/
32
/
25
```
因此,该二叉排序树的先序遍历序列为:18 10 5 73 68 27 99 41 32 25。
相关问题
二叉排序树的查找、插入算法。(算法设计题)
题目:二叉排序树的查找、插入算法。(算法设计题)
二叉排序树是一种特殊的二叉树,它满足左子树所有节点的键值小于根节点的键值,右子树所有节点的键值大于根节点的键值。二叉排序树可以高效地支持查找、插入、删除等操作。
查找算法:从根节点开始,若当前节点的键值等于目标值,则返回该节点;若当前节点的键值大于目标值,则在左子树中继续查找;若当前节点的键值小于目标值,则在右子树中继续查找。若遍历到叶子节点还未找到,则说明目标值不存在于树中。
插入算法:从根节点开始,若当前节点为空,则将目标值插入该节点;若当前节点的键值等于目标值,则插入失败(节点已存在);若当前节点的键值大于目标值,则在左子树中继续插入;若当前节点的键值小于目标值,则在右子树中继续插入。
请写一个二叉排序树插入算法
二叉排序树也称二叉搜索树,是一种特殊的二叉树,它满足以下性质:
1. 左子树中的所有节点的值都小于根节点的值;
2. 右子树中的所有节点的值都大于根节点的值;
3. 左右子树都是二叉排序树。
二叉排序树的插入操作相对简单,可以按照以下步骤进行:
1. 如果树为空,将新节点作为根节点;
2. 如果新节点的值小于当前节点的值,则将新节点插入到左子树中;
3. 如果新节点的值大于当前节点的值,则将新节点插入到右子树中;
4. 如果新节点的值等于当前节点的值,则不做任何操作。
下面是一个示例代码:
```
void insertNode(node **root, int value) {
if (*root == NULL) {
*root = (node*)malloc(sizeof(node));
(*root)->val = value;
(*root)->left = NULL;
(*root)->right = NULL;
} else if (value < (*root)->val) {
insertNode(&((*root)->left), value);
} else if (value > (*root)->val) {
insertNode(&((*root)->right), value);
}
}
```
其中,node是二叉排序树的节点结构体,包含一个整型变量val和两个指向左右子树的指针left和right。
当要插入一个节点时,我们首先判断树是否为空。如果为空,就将新节点作为根节点插入。如果不为空,则比较新节点的值与当前节点的值的大小关系,根据大小关系分别将新节点插入到左子树或右子树中。如果新节点的值等于当前节点的值,则表示已经存在相同的节点,不需要再插入。
注意,在这个算法中,我们使用了二级指针来传递树的根节点。这是因为在插入节点时可能会改变根节点的指向,如果使用一级指针,就无法在函数内部修改根节点的值。