二叉树讲解

博客介绍了二叉查找树,又称二叉搜索树、二叉排序树,阐述其定义及性质。还说明了它是动态树表,在查找时若不存在对应结点则插入,新结点为叶子结点。同时给出了搜索的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 定义

二叉查找树(Binary Search Tree),又称为二叉搜索树、二叉排序树。其或者是一棵空树;或者是具有以下性质的二叉树:
若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值
若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值
左、右子树也分别为二叉排序树

  1. 查找与插入

当二叉查找树不为空时:

首先将给定值与根结点的关键字比较,若相等,则查找成功
若小于根结点的关键字值,递归查左子树
若大于根结点的关键字值,递归查右子树
若子树为空,查找不成功

二叉排序树是一种动态树表。其特点是:树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的结点时再进行插入。新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。

# 搜索
def search(self, node, parent, data):
if node is None:
return False, node, parent
if node.data == data:
return True, node, parent
if node.data > data:
return self.search(node.lchild, node, data)
else:
return self.search(node.rchild, node, data)

# 插入
def insert(self, data):
    flag, n, p = self.search(self.root, self.root, data)
    if not flag:
        new_node = Node(data)
        if data > p.data:
            p.rchild = new_node
        else:
            p.lchild = new_node
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值