二叉树
'''
'''
#先序遍历 【这里指根在先】
from collections import deque
class BitTree():
def __init__(self):
self.root=None
def insert(self,node,pos):
pass
@staticmethod
def pre_order(BitTreeNode):
if BitTreeNode:
print(BitTreeNode.data,end="")
BitTree.pre_order(BitTreeNode.lchild)
BitTree.pre_order(BitTreeNode.rchild)
@staticmethod
def in_order(BitTreeNode):#这个方法基于node
if BitTreeNode:
BitTree.pre_order(BitTreeNode.lchild)
print(BitTreeNode.data, end="")
BitTree.pre_order(BitTreeNode.rchild)
@staticmethod
def post_order(BitTreeNode):
if BitTreeNode:
BitTree.post_order(BitTreeNode.lchild)
BitTree.post_order(BitTreeNode.rchild)
print(BitTreeNode.data, end="")
@staticmethod
def layer_order(BitTreeNode):
# 利用队列实现算法:先到第二层的时候,用掉
queue=deque()
queue.append(BitTreeNode)
while len(queue) > 0: #只要队不空,就先把队列最左侧干出去,然后把最左侧的这个的左右侧节点加入队列
node = queue.popleft()
print(node.data ,end ="")
if node.lchild:
queue.append(node.lchild)
if node.rchild:
queue.append(node.rchild)
class BitTreeNode():
'''二叉树的node具有什么特点呢
具有左子树,有子树,母节点'''
def __init__(self,data=None):
self.data=data
self.parent=None
self.lchild=None
self.rchild=None
a=BitTreeNode("A")
b=BitTreeNode("B")
c=BitTreeNode("C")
d=BitTreeNode("D")
e=BitTreeNode("E")
f=BitTreeNode("F")
g=BitTreeNode("G")
tree1=BitTree()
tree1.root=e
e.lchild=a
a.rchild=c
c.lchild=b
c.rchild=d
e.rchild=g
g.rchild=f
tree1.pre_order(tree1.root)
print("前序遍历\n")
'''
1.显示A-C-B-D这棵树。再这颗树里,左侧没有,中间根是A,然后右侧CBD树,对于CBD树,BCD。所以左侧的顺序就是A-B-C-D,然后中间E。再到右侧,G-F树左侧没有节点,按照左中右,则是GF顺序
'''
tree1.in_order(tree1.root)
print("中\n")
tree1.post_order(tree1.root)
print("后\n")
tree1.layer_order(tree1.root)
print("层次\n")
文件系统结构
'''
实现文件系统【文件系统是种树结构】
'''
version="1.0"
details="不支持绝对路径,不支持搜索"
print("当前文件系统版本是{0} \n具体情况是{1}".format(version,details))
class FileSystemTree():
def __init__(self):
self.root=Node("/") #根目录是”/",模拟linuxxitong
self.now=self.root #文件系统当前的位置
# 模拟linux文件系统的命令
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):
"change dir to expected position"
if name[-1] != "/":
name+="/"
#支持cd到下一级
for child in self.now.children:
if child.name == name:
self.now=child
return
#支持..返回上一级
if name == "../" or "..":
if self.now != None:
self.now =self.now.parent
return
# 支持绝对路径
raise ValueError("Invalid dir")
def pwd(self):
"获取当前位置"
return self.now
def find(self,name):
pass
def tree(self):
"列出当前的结构"
class Node():
def __init__(self,name):
self.name=name
self.type=type
self.children=[] # 下一级可能有很多内容
self.parent=None # 直接的上一级只有1个
def __repr__(self):
return (self.name)
#当仅定义 __repr__ 的时候, __repr__ == __str__, 但是仅定义 __str__ 的情况下,两者不相等
# n=Node("HELLO")
# n2=Node("HELLO2")
# n.children.append(n2)
# n2.parent=n
# print(n)
tree=FileSystemTree()
tree.mkdir("var/")
print(tree.root.children)
print(tree.ls())
tree.mkdir("/usr")
tree.cd("/usr")
tree.mkdir("zeng/")
tree.mkdir("jie/")
tree.cd("zeng/")
tree.mkdir("mon1")
print(tree.pwd())
tree.cd("..")
print(tree.pwd())