📜  门| GATE-CS-2015(套装2)|问题 17(1)

📅  最后修改于: 2023-12-03 15:28:44.412000             🧑  作者: Mango

问题 17

这道问题涉及到对二叉搜索树进行插入操作。给出的代码示例中仅实现了二叉树的搜索功能,需要我们在此基础上实现插入功能。

实现思路

二叉搜索树是一种有序树,对于每个节点,左子树上的所有节点的值都小于该节点的值,而右子树上的所有节点的值都大于该节点的值。因此,二叉搜索树的插入操作应该根据节点值的大小决定往左还是往右走。

具体实现上,我们可以先遍历二叉搜索树找到要插入的位置,然后新建一个节点并将其插入到相应位置。

以下是二叉搜索树插入操作的代码实现:

def insert(root, key):
    if root is None:
        return Node(key)
    if key < root.data:
        root.left = insert(root.left, key)
    elif key > root.data:
        root.right = insert(root.right, key)
    return root

其中,root 代表二叉搜索树的根节点,key 代表要插入的节点的值。如果 root 为空,直接返回一个新节点;否则,比较 keyroot 的值,若 keyroot.data 小,则往左子树递归插入;否则,往右子树插入。

测试样例

以下是本题的测试样例:

root = Node(50)
insert(root, 30)
insert(root, 20)
insert(root, 40)
insert(root, 70)
insert(root, 60)
insert(root, 80)
inorder(root)

运行结果是:

20 30 40 50 60 70 80
总结

二叉搜索树是一种常用的数据结构,具有快速插入、删除和查找的特点。插入操作是其中的一个重要部分,在实现时需要注意保持树的有序性。