我正在尝试构建一个二叉树,但坚持将两个节点添加到root。
我应该编写什么函数来启用向这两个节点添加节点?
我有以下代码:
class Btree:
def __init__(self, root):
self.key = root
self.lc = None
self.rc = None
def insert_lc(self, newNode):
if self.lc == None:
self.lc = Btree(newNode)
else:
t = Btree(newNode)
t.lc = self.lc
self.lc = t
def insert_rc(self, newNode):
if self.rc == None:
self.rc = Btree(newNode)
else:
t = Btree(newNode)
t.rc = self.rc
self.rc = t
def get_rc(self):
return self.rc
def get_lc(self):
return self.lc
def set_Root(self, val):
self.key = val
def get_Root(self):
return self.key
r = Btree(1)
r.insert_lc(2)
r.insert_rc(4)
我想我需要一个函数,所以我可以将左子和右子添加到值为2和4的节点
答案 0 :(得分:0)
首先,我不太明白为什么要将新节点的左(右)子节点分配给该新节点本身。如果您稍后尝试搜索树,这将使您获得无限循环。
t = Btree(newNode)
#The line below seems unnecessary
t.lc = self.lc
self.lc = t
其次,在Btree
构造函数中,您有一个名为root
的参数,它似乎意图是对当前节点的根的引用。但是,您将节点的密钥作为该参数传递,因此无法访问节点的根目录。我知道在你的情况下可能根本不需要,但参数名称仍然很混乱。如果要引用父节点,则应该向构造函数添加另一个参数:
def __init__(self, root, key):
self.root = root
self.key = key
self.lc = None
self.rc = None
这样您就拥有了密钥和父节点引用。您还需要修改insert_rc
和insert_lc
方法:
def insert_rc(self, newNode):
if self.rc == None:
#Parent node is the one the insert_rc method is called on,
#so we pass self as the root parameter
self.rc = Btree(self, newNode)
else:
t = Btree(self, newNode)
self.rc = t
#Same with insert_lc
最后,要回答您的初始问题:要将子项添加到添加的节点,您只需致电get_rc
或get_lc
,这两个项都会返回Btree
的实例,以便您可以添加子项它们的节点:
r = Btree(1)
r.insert_lc(2)
r.insert_rc(4)
#Insert left child to the node with key=2
r.get_lc().insert_lc(3)
#Insert right child to the node with key=4
r.get_rc().insert_rc(5)