
编程开发
切片copy
当我们需要在Go语言中复制一个切片时,我们可以使用内置的copy函数。copy函数可以将一个切片的元素复制到另一个切片中。下面是一个示例: 在上面的示例中,我们首先创建了一个源切片
import random
class Node(object):
def __init__(self,key):
self.key=key
self.left=None
self.right=None
class BSTree(object):
def __init__(self):
self.root=None
def put(self,key):
if not self.root:
self.root=Node(key)
else:
self.root=self._put(self.root,key)
def _put(self,node,key):
if node is None:
node=Node(key)
elif key<node.key:
node.left=self._put(node.left,key)
elif key>node.key:
node.right=self._put(node.right,key)
return node
def convert(self):
if self.root:
return self._convert(self.root)
def _convert(self,node,asright=True):
if not node:
return None
else:
left=self._convert(node.left,False)
if left:
left.right=node
node.left=left
right=self._convert(node.right)
if right:
right.left=node
node.right=right
cur=node
if asright:
while cur.left:
cur=cur.left
if not asright:
while cur.right:
cur=cur.right
return cur
if __name__=='__main__':
t=BSTree()
for i in range(10):
t.put(random.randint(0,100))
cur=t.convert()
if cur:
print cur.key
while cur.right:
cur=cur.right
print cur.key
while cur.left:
cur=cur.left
print cur.key
另一种思路是采用中序遍历的方法。二叉查找树中序遍历的话就是从小到大排列。将遍历过的节点转为有序链表,然后将下一个要遍历的节点加到链表结尾。
import random
class Node(object):
def __init__(self,key):
self.key=key
self.left=None
self.right=None
class Sorted_LinkedList(object):
def __init__(self):
self.head=None
def travel(self):
node=self.head
while node:
print node.key
node=node.right
class BSTree(object):
def __init__(self):
self.root=None
self.list=Sorted_LinkedList()
self.curNode=None
def put(self,key):
if not self.root:
self.root=Node(key)
else:
self.root=self._put(self.root,key)
def _put(self,node,key):
if node is None:
node=Node(key)
elif key<node.key:
node.left=self._put(node.left,key)
elif key>node.key:
node.right=self._put(node.right,key)
return node
def convert(self):
self._travel(self.root)
return self.list
def _travel(self,node):
if node:
self._travel(node.left)
if self.curNode:
self.curNode.right=node
node.left=self.curNode
else:
self.list.head=node
self.curNode=node
self._travel(node.right)
if __name__=='__main__':
t=BSTree()
for i in range(100):
t.put(random.randint(0,100))
l=t.convert()
l.travel()
评论 0