【发布时间】:2019-06-28 00:43:02
【问题描述】:
为了更好地理解递归函数,我正在尝试为二叉树创建一个 Python 脚本,用于插入值,在进入下一个之前完全填充级别。
这是我的树节点实现:
class Node:
def __init__(self, value):
self.value = value
self.right_child = None
self.left_child = None
self.parent = None
class Tree:
def __init__(self):
self.root = None
我现在遇到的问题是设置满足该标准的条件。
一个例子:这里我按顺序添加以下数字:12、5、18、2、9、15、19、13、17。因此,将东西放入下一个级别的唯一条件是父级已满。
_12_______
/ \
5 __18_
/ \ / \
2 9 15_ 19
/ \
13 17
这是我目前所拥有的:
def insert(self,value):
if(self.root==None):
self.root=Node(value)
else:
self._insert(value,self.root)
def _insert(self, value, curNode):
if(curNode.left_child==None):
curNode.left_child=Node(value)
curNode.left_child.parent = curNode
elif(curNode.right_child==None):
curNode.right_child=Node(value)
curNode.right_child.parent = curNode
else:
self._insert(value,curNode.left_child)
给出:
_12_
/ \
__5 18
/ \
__2_ 9
/ \
15_ 19
/ \
13 17
因此忽略所有正确的孩子。问题当然是我代码的最后一个else。我怎样才能让这个考虑节点的左右子节点?
【问题讨论】:
-
您可能应该提供更多代码来帮助希望帮助您的人,以便他们可以运行您的代码的最小示例。您的树类对初学者很有帮助。
-
当然,它是基本的树类节点类实现。我现在正在把它写在帖子里。谢谢!
-
你说的是二叉树,而不是二叉 search 树,看起来你实际上想要做的是在树的形式。代替您当前的方法(在正确的位置插入),一种更有用的方法可能是“在某处插入叶子,然后将树旋转直到平衡”。另请查看self-balancing binary search trees。
标签: python binary-tree