Python prep 随想练习-Day1

这篇博客介绍了链表和二叉搜索树的基础知识及操作实现。首先讲解了链表的构造,包括value和next属性,并实现了插入、追加和字符串表示的方法。接着,介绍了二叉搜索树的概念,其特性为左子节点小于中间节点,右子节点大于中间节点,并展示了插入、求和以及字符串表示的实现。通过这些基本操作,读者可以更好地理解这两种数据结构。
摘要由CSDN通过智能技术生成

Day1-part1

Linked data structure, Singly Linked Lists 单链表

链表基础

链表是一种数据结构,可以认为包含两个部分,一个部分是value,就是含有的值。另一个部分是next,指向下一个节点。
在这里插入图片描述

class Listnode:
	def __init__(self,val,head=None):
		self.val=val
		self.next=head

我们先创建一个链表节点,它包含value和next。

链表操作实现

我们先实现PPT中想要求你会的操作:insert(在链表头插入一个值),append(在链表末尾插入一个值),___str __(类内置方法,可以使print能够实现)。

insert实现

class mylinkerlist:
	def __init__(self):
		self.dummyhead=Listnode(0)
	def insert(self,val):
		node=Listnode(val)
		node.next=self.dummyhead.next
		self.dummyhead.next=node

append实现

class mylinkerlist:
	def __init__(self):
		self.dummyhead=Listnode(0)
	def insert(self,val):
		node=Listnode(val)
		node.next=self.dummyhead.next
		self.dummyhead.next=node
	def append(self,val):
		cur=self.dummyhead
		while(cur.next!=None):
			cur=cur.next
		cur.next=Listnode(val)

___str___实现

class mylinkerlist:
	def __init__(self):
		self.dummyhead=Listnode(0)
	def insert(self,val):
		node=Listnode(val)
		node.next=self.dummyhead.next
		self.dummyhead.next=node
	def append(self,val):
		cur=self.dummyhead
		while(cur.next!=None):
			cur=cur.next
		cur.next=Listnode(val)
	def __str__(self):
		cur=self.dummyhead.next
		if cur == None:
			return ''
		else:
			ret=str(cur.val)
			while(cur.next!=None):
				cur=cur.next
				ret+=''+str(cur.val)
			return ret

其实都是一个类似的东西,借助链表的基本操作完成实现的!相信你可以看明白的宝贝!
我第一次给你讲的内容有点偏深刻了,当时咱们还想的是删除第index位置的链表节点。
但是ppt没讲这么难,咱们任务导向一下!就会这三个就好了

Day1-part2

The Binary Search Tree 二叉搜索树

二叉树基础

二叉树这种数据结构,是一种类似树的结构。核心是每一个树结点,每个结点都有自己的value,同时还有自己的left和right结点。
什么是二叉搜索树呢,就是说一定要满足 left < middle < right !
在这里插入图片描述

class tree:
	class treenode:
		def __init__(self,val=0,left=None,right=None):
			self.val=val
			self.left=left
			self.right=right
	def __init__(self):
		self.root=None

创建 tree 这个类, tree中的关键是treenode这个树节点,包含value,left和right。

二叉树操作实现

我们先实现PPT中想要求你会的操作:insert(二叉树中插入一个节点),sum(求取二叉树节点的总合),___str __(类内置方法,可以使print能够实现)。

insert实现

class tree:
	class treenode:
		def __init__(self,val=0,left=None,right=None):
			self.val=val
			self.left=left
			self.right=right
	def __init__(self):
		self.root=None
	def insert(self,val):
		if self.root==None:
			self.root=tree.treenode(val=val)
		else:
			self.insert_help(self.root,val)
	def insert_help(cur,val):
		if val<cur.left.val:
			if cur.left==None:
				cur.left=tree.treenode(val=val)
			else:
				insert_help(cur.left,val)
		elif val>cur.right.val:
			if cur.right==None:
				cur.right=tree.treenode(val=val)
			else:
				insert_help(cur.right,val)

__str__实现

class tree:
	class treenode:
		def __init__(self,val=0,left=None,right=None):
			self.val=val
			self.left=left
			self.right=right
	def __init__(self):
		self.root=None
	def insert(self,val):
		if self.root==None:
			self.root=tree.treenode(val=val)
		else:
			self.insert_help(self.root,val)
	def insert_help(self,cur,val):
		if val<cur.left:
			if cur.left==None:
				cur.left=tree.treenode(val=val)
			else:
				self.insert_help(cur.left,val)
		elif val>cur.right:
			if cur.right==None:
				cur.right=tree.treenode(val=val)
			else:
				self.insert_help(cur.right,val)
	def __str__(self):
			self.str_help(self.root)
	def str_help(self,cur):
		if cur==None:
			return ''
		else:
			ret=str(cur.val)
			left_str=self.str_help(cur.left)
			right_str=self.str_help(cur.right)
			if left_str:
				ret=left_str+''+ret
			if right_str:
				ret=ret+''+right_str
		return ret

sum实现

class tree:
	class treenode:
		def __init__(self,val=0,left=None,right=None):
			self.val=val
			self.left=left
			self.right=right
	def __init__(self):
		self.root=None
	def insert(self,val):
		if self.root==None:
			self.root=tree.treenode(val=val)
		else:
			self.insert_help(self.root,val)
	def insert_help(self,cur,val):
		if val<cur.left:
			if cur.left==None:
				cur.left=tree.treenode(val=val)
			else:
				self.insert_help(cur.left,val)
		elif val>cur.right:
			if cur.right==None:
				cur.right=tree.treenode(val=val)
			else:
				self.insert_help(cur.right,val)
	def __str__(self):
			self.str_help(self.root)
	def str_help(self,cur):
		if cur==None:
			return ''
		else:
			ret=str(cur.val)
			left_str=self.str_help(cur.left)
			right_str=self.str_help(cur.right)
			if left_str:
				ret=left_str+''+ret
			if right_str:
				ret=ret+''+right_str
		return ret
	def sum(self):
		return sum_help(self.root)
	def sum_help(self,cur):
		if cur==None:
			return 0
		else:
			ret=cur.val
			left=self.sum_help(cur.left)
			right=self.sum_help(cur.right)
			reurn ret+left+right
bt=tree()
bt.insert(12)
bt.insert(7)
bt.insert(13)
bt.insert(-5)
print(bt)
print(bt.sum())

一起好好看一下吧,这个拿下了就完事了!
加油,我相信你可以的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值