数据结构 - 二叉树,AVL树

学习目标

1.二叉树
2.AVL树

树与二叉树

树是一种数据结构
比如:目录结构
树是一种可以递归定义的数据结构
树是由n个节点组成的集合:
如果n=0,那这是一棵空树;
如果n>0,那存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树。

在这里插入图片描述

树的实例:模拟文件系统

class Node:
	def __init__(self, name, type='dir'):
		self.name = name
		self.type = type
		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):
		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):
		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("var2/")
tree.mkdir("var1/")
tree.cd("var/")
tree.mkdir("python")
print(tree.ls())
	

二叉树

叉树的链式存储:将二叉树的节点定义为一个对象,节点之间通过类似链表的链接方式来连接。
在这里插入图片描述

class BiTreeNode:
	def __init__(self, data):
		self.data = data
		self.lchild = None
		self.rchild = None
a = BiTreeNode("A")
b = BiTreeNode("B")
c = BiTreeNode("C")
d = BiTreeNode("D")
e = BiTreeNode("E")
f = BiTreeNode("F")
g = BiTreeNode("G")

e.lchild = a
e.rchild = g
a.rchild = c
c.lchild = b
c.rchild = d
g.rchild = f

root = e
print(root.lchild.rchild.data)

二叉树的遍历

二叉树的遍历方式:
前序遍历: EACBDGF
中序遍历: ABCDEGF
后序遍历: BDCAFGE
层次遍历: EAGCFBD
在这里插入图片描述

def pre_order(root):
	if root:
		print(root.data, end=',')
		pre_order(root.lchild)
		pre_order(root.rchild)

def in_order(root):
	if root:
		in_order(root.lchild)
		print(root,data, end=',')
		in_order(root.rchild)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值