Python数据结构之二叉排序树
来源:互联网 发布:传染病监测数据分析 编辑:程序博客网 时间:2024/06/05 14:49
SortTree.py
#coding=utf-8#二叉排序树class TreeNode: def __init__(self,data,left=None,right=None): self.data=data self.left=left self.right=rightclass SortTree: def __init__(self): self.root=None def set_root(self,rootNode): self.root=rootNode def find(self,value): Node=self.root Node,flag=self.__find(value,Node,0) return Node,flag def __find(self,value,Node,num): num+=1 if Node.left==None and Node.right==None and value!=Node.data: print Node.data,'find error',num return Node,False elif value<Node.data: return self.__find(value,Node.left,num) elif value>Node.data: return self.__find(value,Node.right,num) elif value==Node.data: print value,'find succeed',num return Node,True def insert(self,value): Node,flag=self.find(value) if flag==True: print 'Had',value,'cannot insert' else: if value>Node: Node.right=TreeNode(value) else: Node.left=TreeNode(value) def __findP(self,value,Node,temp): if Node.left==None and Node.right==None and value!=Node.data: return Node,False elif value<Node.data: temp=Node return self.__findP(value,Node.left,temp) elif value>Node.data: temp=Node return self.__findP(value,Node.right,temp) elif value==Node.data: #print value,'find succeed' return Node,temp,True def delete(self,value): temp=0 Node,Parent,flag=self.__findP(value,self.root,temp) if flag==True: #print Node.data,Parent.data,flag if Node.left==None and Node.right==None: if Parent.left==Node: Parent.left=None elif Parent.right==Node: Parent.right=None elif Node.left==None and Node.right!=None: if Parent.left==Node: Parent.left= Node.right elif Parent.right==Node: Parent.right= Node.right elif Node.left!=None and Node.right==None: if Parent.left==Node: Parent.left= Node.left elif Parent.right==Node: Parent.right= Node.left else: #中序遍历前驱替换本节点的值 #删除中序前驱 res=self.list_all() resV=[re.data for re in res] var=res[resV.index(Node.data)-1].data self.delete(var) Node.data=var res=self.list_all() resV=[re.data for re in res] print 'mid',resV else: print "error" def list_all(self): #中序遍历 lis=[] res=[] node = self.root while lis or node: while node: lis.append(node) node = node.left #print node.data if len(lis)>0: node = lis[-1] lis=lis[:-1] if node: res.append(node) node= node.right return res
test.py
#coding=utf-8from SortTree import SortTree,TreeNodedef printL(tree): res=tree.list_all() resV=[re.data for re in res] print 'mid',resVn37=TreeNode(37)n51=TreeNode(51)n35=TreeNode(35,None,n37)n47=TreeNode(47,n35,n51)n58=TreeNode(58,n47,None)n93=TreeNode(93)n99=TreeNode(99,n93,None)n73=TreeNode(73)n88=TreeNode(88,n73,n99)n62=TreeNode(62,n58,n88)tree=SortTree()tree.set_root(n62)printL(tree)tree.insert(95)printL(tree)#tree.delete(51)tree.delete(99)tree.delete(73)tree.delete(47)printL(tree)
阅读全文
0 0
- Python数据结构之二叉排序树
- 数据结构之二叉排序树
- 数据结构之(二叉排序树)
- 数据结构学习之二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- JAVA数据结构之二叉排序树
- 数据结构之二叉排序树
- JavaScript数据结构之 二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- 实用数据结构之二叉排序树小结
- 数据结构——查找之二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 递归获取下级数据
- 在C#中使用gRPC及protobuf简介
- 关于Idea导入已有web项目
- jasper报错java.lang.ExceptionInInitializerError net.sf.jasperreports.engine.fill.JRBaseFiller
- 每天一个Linux命令—mkdir
- Python数据结构之二叉排序树
- Codeforces Round 444 div2 D Ratings and Reality Shows (双指针)
- 关于java.sql.SQLException: Connections could not be acquired from the underlying database!
- Spark 1.6 内存管理模型( Unified Memory Management)分析
- Qt中建立DockWidget的代码
- boot2docker 搭建完美的开发环境
- jquery 用动态加载js来解决浏览器缓存
- android 新版的设计规范(Material Design)
- Jmeter分布式测试