还记得在4月时候的腾讯笔试时候就有这道题目,当时是要C++实现,然而我没学过C++,正好最近正在研究算法,就用Python写吧,其实很简单,之后还会把其他树结构的代码也贴上来。
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 inverttree(self, treenode): #真正的翻转只有这8行代码
if treenode == None:
return None
temp = treenode.lchild
treenode.lchild = treenode.rchild
treenode.rchild = temp
self.inverttree(treenode.lchild)
self.inverttree(treenode.rchild)
树的翻转其实就是递归遍历每一个结点,把所有结点的左孩子和右孩子互换,因为没有定义的孩子的data为None,所以只有一个孩子的结点也不会出现问题
树的结构如下:
上面代码省略了添加删除获取高度等等其他操作,我会在下一篇一同给出..