二叉树顾名思义就是一个结点最多只有两个子结点。
二叉树的初始化:
class Node(object):
def __init__(self, data=-1, lchild=None, rchild=None):
self.data = data
self.lchild = lchild
self.rchild = rchild
class Binsearchtree(object):
def __init__(self, data):
self.root = Node(data)
二叉树的插入:(按照二叉搜索树的排序方法,即比结点小的放到左子树,比结点大的放到右子树)
def append(self, data):
node = Node(data)
treenode = self.root
while treenode:
if treenode.data > data:
if treenode.lchild == None:
treenode.lchild = node
break
else:
treenode = treenode.lchild
if treenode.data < data:
if treenode.rchild == None:
treenode.rchild = node
break
else:
treenode = treenode.rchild
if treenode.data == data:
print 'is exist'
return
前序遍历:
def showfronttree(self, treenode):
if treenode == None:
return
print treenode.data,
self.showfronttree(treenode.lchild)
self.showfronttree(treenode.rchild)
中序遍历:
def showmidtree(self, treenode):
if treenode == None:
return
self.showmidtree(treenode.lchild)
print treenode.data,
self.showmidtree(treenode.rchild)
后序遍历:
def showlatertree(self, treenode):
if treenode == None:
return
self.showlatertree(treenode.lchild)
self.showlatertree(treenode.rchild)
print treenode.data,
获取最大结点值:
def get_maxdata(self):
treenode = self.root
while treenode.rchild:
treenode = treenode.rchild
return treenode.data
获取最小结点值:
def get_mindata(self):
treenode = self.root
while treenode.lchild:
treenode = treenode.lchild
return treenode.data
删除结点涉及到结点位置移动,我将在下一篇avl树中给出。