如何实现二叉树?
在Python中,哪种数据结构最适合用来实现二叉树?
21 个回答
30
# simple binary tree
# in this implementation, a node is inserted between an existing node and the root
class BinaryTree():
def __init__(self,rootid):
self.left = None
self.right = None
self.rootid = rootid
def getLeftChild(self):
return self.left
def getRightChild(self):
return self.right
def setNodeValue(self,value):
self.rootid = value
def getNodeValue(self):
return self.rootid
def insertRight(self,newNode):
if self.right == None:
self.right = BinaryTree(newNode)
else:
tree = BinaryTree(newNode)
tree.right = self.right
self.right = tree
def insertLeft(self,newNode):
if self.left == None:
self.left = BinaryTree(newNode)
else:
tree = BinaryTree(newNode)
tree.left = self.left
self.left = tree
def printTree(tree):
if tree != None:
printTree(tree.getLeftChild())
print(tree.getNodeValue())
printTree(tree.getRightChild())
# test tree
def testTree():
myTree = BinaryTree("Maud")
myTree.insertLeft("Bob")
myTree.insertRight("Tony")
myTree.insertRight("Steven")
printTree(myTree)
想了解更多内容可以点击这里:这是一个非常简单的二叉树实现。
这个链接提供了一个很不错的教程,中间还有一些问题可以练习。
56
132
这是我简单的递归实现的二叉搜索树。
#!/bin/python
class Node:
def __init__(self, val):
self.l = None
self.r = None
self.v = val
class Tree:
def __init__(self):
self.root = None
def get_root(self):
return self.root
def add(self, val):
if not self.root:
self.root = Node(val)
else:
self._add(val, self.root)
def _add(self, val, node):
if val < node.v:
if node.l:
self._add(val, node.l)
else:
node.l = Node(val)
else:
if node.r:
self._add(val, node.r)
else:
node.r = Node(val)
def find(self, val):
if self.root:
return self._find(val, self.root)
def _find(self, val, node):
if val == node.v:
return node
elif val < node.v and node.l:
return self._find(val, node.l)
elif val > node.v and node.r:
return self._find(val, node.r)
def delete_tree(self):
# garbage collector will do this for us.
if self.root:
self.root = None
def view_tree(self):
if self.root:
self._view_tree(self.root)
def _view_tree(self, node):
if node:
self._view_tree(node.l)
print(node.v, end = " ")
self._view_tree(node.r)
# 3
# 0 4
# 2 8
tree = Tree()
tree.add(3)
tree.add(4)
tree.add(0)
tree.add(8)
tree.add(2)
tree.view_tree()
print(tree.find(3).v)
print(tree.find(10))
tree.delete_tree()
tree.view_tree()