自己写的二叉树插入程序

为了在洛谷上刷题写的程序,详情见注释

class Node: #树节点类
    def __init__(self,name,left=None,right=None):
        self.name = name #节点名称(或编号)
        self.left = left #节点的左孩子
        self.right = right #节点的右孩子

def tree_append(head,name,append_name,l_or_r):
    '''参数:
        head 二叉树的头节点
        name 要插入节点的父节点的名称
        append_nane 要插入节点的名称
        l_or_r 要插入的节点是其父节点的左孩子还是右孩子
    '''
    if head.name == name: #如果找到了,进行插入。 
        #注意:如果插入位置已存在节点,将会替换掉原来的节点,并删除其左右子树
        #新插入节点一定是叶子节点
        if l_or_r == 'l':
            head.left = Node(append_name)
        elif l_or_r == 'r':
            head.right = Node(append_name)
        return 'target_founded' #返回值没有什么用处,但可以用来debug
        
    #如果没有找到,递归查找其左右子树
    if head.left:
        if head.right:
            return (tree_append(head.left,name,append_name,l_or_r),tree_append(head.right,name,append_name,l_or_r))
            #如果都有左右孩子,则都进行查找

        else:
            return tree_append(head.left,name,append_name,l_or_r)
            #如果只有左孩子,则只查找左子树

    elif head.right:
        return tree_append(head.right,name,append_name,l_or_r)
        #如果只有右孩子,则只查找右子树

    else:
        return 'reach_leave' #没有左右孩子,说明是叶子节点,return返回

#以下是测试部分
#创建一个二叉树,头节点为a,其左孩子为b,右孩子为c。
h = Node('a',Node('b'),Node('c'))
tree_append(h,'c','d','r') #将一个名为d的节点插入为c的右节点
print(h.right.name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值