【发布时间】:2018-01-17 20:10:23
【问题描述】:
我正在尝试理解二叉树,但这样做让我对类实例如何交互、每个实例如何链接到另一个实例感到困惑?
我的实现:
class Node(object):
def __init__(self, key):
self.key= key
self.L = None
self.R = None
class BinaryTree(object):
def __init__(self):
self.root = None
def get_root(self):
return self.root
def insert(self, key):
if self.get_root()==None:
self.root = Node(key)
else:
self._insert(key, self.root)
def _insert(self, key, node):
if key < node.key:
if node.L == None:
node.L = key
else:
self._insert(key, Node(node.L))
if key > node.key:
if node.R == None:
node.R = key
else:
self._insert(key, Node(node.R))
myTree= BinaryTree()
一个场景
假设我想插入 10,我做 myTree.insert(10),这将实例化 Node() 的新实例,这对我来说很清楚。
现在我想加11,我希望这成为根节点的右节点;即它将存储在根节点Node() 的属性R 中。
现在我不明白的部分来了。当我添加 12 时,它应该成为根节点右孩子的孩子。在我的代码中,这会创建一个Node() 的新 实例,其中11 应该是key,12 应该是R。
所以我的问题有两个:Node() 的最后一个实例会发生什么?如果没有,它会被删除吗?我如何访问它?
或者是一个二叉树的结构,可以抽象为每个Node() 像在图中一样连接在一起
注意:这个实现很大程度上来自 djra 的实现,来自这个问题How to Implement a Binary Tree?
【问题讨论】:
标签: python class data-structures binary-tree nodes