请写一个二叉排序树插入算法
时间: 2024-05-03 21:18:35 浏览: 82
平衡二叉排序树的插入算法-数据结构课件
二叉排序树也称二叉搜索树,是一种特殊的二叉树,它满足以下性质:
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。
当要插入一个节点时,我们首先判断树是否为空。如果为空,就将新节点作为根节点插入。如果不为空,则比较新节点的值与当前节点的值的大小关系,根据大小关系分别将新节点插入到左子树或右子树中。如果新节点的值等于当前节点的值,则表示已经存在相同的节点,不需要再插入。
注意,在这个算法中,我们使用了二级指针来传递树的根节点。这是因为在插入节点时可能会改变根节点的指向,如果使用一级指针,就无法在函数内部修改根节点的值。
阅读全文