Python数据结构与算法笔记(八):数据结构——树,二叉树和AVL树

本文介绍了树的概念,特别是二叉树的存储方式、遍历方法以及二叉搜索树的特性。讨论了二叉树的插入、查询和删除操作,并强调了当树偏斜时可能导致的效率问题。接着详细阐述了AVL树的平衡性质、平衡因子和插入过程中的旋转调整,以及四种常见的旋转类型。最后提到了AVL树的应用以及与B树的区别。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述

class Node:
    def __init__(self, name, type='dir'):
        self.name = name
        self.type = type   #"dir" or "file"
        self.children = []
        self.parent = None
        # 链式存储

    def __repr__(self):
        return self.name

class FileSystemTree:
    def __init__(self):
        self.root = Node("/")
        self.now = self.root

    def mkdir(self, name):
        # name 以 / 结尾
        if name[-1] != "/":
            name += "/"
        node = Node(name)
        self.now.children.append(node)
        node.parent = self.now

    def ls(self):
        return self.now.children

    def cd(self, name):
        # "/var/python/"
        if name[-1] != "/":
            name += "/"
        if name == "../":
            self.now = self.now.parent
            return
        for child in self.now.children:
            if child.name == name:
                self.now = child
                return
        raise ValueError("invalid dir")

tree = FileSystemTree()
tree.mkdir("var/")
tree.mkdir("bin/")
tree.mkdir("usr/")

tree.cd("bin/")
tree.mkdir("python/")

tree.cd("../")

print(tree.ls())
[var/, bin/, usr/]

二叉树

概念:
如果用列表存储,很有地方就会有空着的,浪费空间。因此采用链式存储。
在这里插入图片描述

from collections import deque

# 二叉树的节点
class BiTreeNode:
    def __init__(self, data):
        self.data = data
        self.lchild = None   # 左孩子
        self.rchild = None # 右孩子
a = BiTreeNode("A")
b 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值