二叉树遍历python_在Python中遍历二叉树

我几乎完成了一个项目,让我们创建一个字典类,利用二叉树结构。然而,我一直纠结于如何实现一个打印出树中所有元素的方法,我只是对二进制树没有太多的经验,所以在如何对其进行编码上相当混乱。

我试图找出的方法是keys方法,它将遍历整个树并返回所有键的列表。我认识的人暗示我应该创建一个私有的helper函数,它递归地遍历树并跟踪所有的键。我想创造他所说的,但我根本不知道如何编码。有人能帮我把这个编码出来吗?搞清楚这件事对我来说差不多就完了。

这是我目前的密码。[Key:Value]对是元组。我已经对它进行了编码,并从教科书示例中获得了一些帮助来构建您在这里看到的所有内容:class DictWithTree:

def __init__(self):

self._element = None

self._left = None

self._right = None

self._size = 0

def isempty(self):

if self._element == None:

return True

return False

def __len__(self):

return self._size

def __contains__(self,key):

path = self._tracePath(key)

return path[-1]._size > 0

def _tracePath(self,key): # taken from the textbook example and modified

if len(self) == 0 or key == self._element[0]:

return [self]

elif len(key) < len(self._element[0]):

return [self] + self._left._tracePath(key)

else:

return [self] + self._right._tracePath(key)

def __getitem__(self,key):

if len(self) == 0:

raise KeyError(key)

elif key == self._element[0]:

return self._element[1]

elif key < self._element[0]:

return self._left[key]

elif key > self._element[0]:

return self._right[key]

else:

raise KeyError(key)

def __setitem__(self,key,value):

path = self._tracePath(key)

endOfPath = path[-1]

if endOfPath._element != None:

if endOfPath._element[0] == key:

endOfPath._element = key,value

if endOfPath._size == 0: # a new element

for location in path:

location._size += 1

endOfPath._element = key,value

endOfPath._left = DictWithTree()

endOfPath._right = DictWithTree()

def clear(self):

self._element = None

self._left = None

self._right = None

self._size = 0

def pop(self,key):

value = self[key]

self._remove(key)

return value

def popitem(self): # returns the 'last' item in the dictionary,

if self.isempty(): # (i.e. the largest key in the dictionary)

return KeyError("There are no keys in the dictionary")

elif self._right._element == None:

return self._element

else:

return self._right.popitem()

def _remove(self,key):

path = self._tracePath(key)

endOfPath = path[-1]

if endOfPath._size > 0:

for location in path:

location._size -= 1

if len(endOfPath._left) == 0:

endOfPath._promoteChild(endOfPath._right)

elif len(endOfPath._right) == 0:

endOfPath._promoteChild(endOfPath._left)

else:

endOfPath._element = endOfPath._left.pop()

def _promoteChild(self,child):

self._element = child._element

self._left = child._left

self._right = child._right

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值