【发布时间】:2019-12-16 12:27:58
【问题描述】:
我有一个 btree 类和一个插入函数,可以将节点插入到树中,广度明智。但是树没有在右侧插入节点。
我正在创建根节点。 insert函数将左右节点正确插入根节点。
然后递归地,我尝试在左节点插入两个节点,在右节点插入两个节点。但是在这一步中,所有节点只添加到左侧。节点也被添加到 None 父节点。
我知道,我在插入函数中的最后一个 else 语句中犯了一个错误。但是我尝试了很多组合,但都导致了一些错误。
class BinTree(object):
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def insert(self,val):
if self.left is None:
self.left = BinTree(val)
elif self.right is None:
self.right = BinTree(val)
elif self.left:
self.left.insert(val)
else:
self.right.insert(val)
root = BTree('A')
root.insert('B')
root.insert('C')
root.insert(None)
root.insert('D')
root.insert(None)
root.insert('E')
root.insert('F')
Expected:
A
/ \
B C
/\ /\
None D None E
/
F
Getting:
A
/ \
B C
/ \
None D
/ \
None E
/
F
【问题讨论】:
-
您能否用
insert()中的那些if语句来告诉我们您的思考过程? -
欢迎来到 SO!需要考虑的几件事:B-tree 不是二叉树。看起来您正在尝试创建二叉树,因此如果该类称为
BTree,会令人困惑。其次,我没有看到任何Node类,因此该示例不起作用。你能澄清你的意图吗?最后,正如迈克尔上面所说的,想想if语句在做什么,尤其是第三个。什么时候会是假的?就本示例而言,使用None是一个令人困惑的值名称,建议始终使用唯一字母。 -
在代码块中正确格式化你的树的道具。大多数人都懒得这样做(尽管他们应该这样做)。
-
@asciillatin 是否有任何答案解决了您的问题?
-
加
None是什么意思?
标签: python recursion data-structures tree binary-tree