二叉树在添加新节点的时候,需要输入两个参数:父节点的位置和节点储存的元素。
但是要建立一个如图所示的二叉树实例时,除了根节点的位置我可以用root函数得到,其他的节点位置我都不知道,该怎么建立实例?

如果可以,能给出建立图示二叉树实例的代码吗?
#二叉树的链式储存结构
class LinkedBinaryTree(BinaryTree):
'''链式储存结构实现二叉树'''
class _Node:
__slots__='_element','_parent','_left','_right'
def __init__(self,element,parent=None,left=None,right=None):
self._element=element
self._parent=parent
self._left=left
self._right=right
class Position(BinaryTree.Position):
'''元素的保存地址'''
def __init__(self,container,node):
'''构造函数不应由用户调用'''
self._container=container
self._node=node
def element(self):
'''返回保存在地址中的元素'''
return self._node._element
def __eq__(self,other):
'''判断两个实例是否相同'''
return type(other) is type(self) and other._node is self._node
def _validate(self,p):
'''返回关联的节点,如果位置有效'''
if not isinstance(p,self.Position):
raise TypeError('p must be proper Position type')
if p._container is not self:
raise ValueError('p does not belong to this container')
if p._node._parent is p._node:
raise ValueError('p is no longer valid')
return p._node
def _make_position(self,node):
'''把节点封装进position实例'''
return self.Position(self,node) if node is not None else None
def __init__(self):
'''创建一个空的树'''
self._root=None
self._size=0
def __len__(self):
'''返回所有元素的数量'''
return self._size
def root(self):
'''返回根节点的地址'''
return self._make_position(self._root)
def parent(self,p):
'''返回p的父节点'''
node=self._validate(p)
return self._make_position(node._parent)
def left(self,p):
'''返回左孩子的地址'''
node=self._validate(p)
return self._make_position(node._left)
def right(self,p):
'''返回右孩子的地址'''
node=self._validate(p)
return self._make_position(node._right)
def num_children(self,p):
'''返回p节点的孩子数'''
node=self._validate(p)
count=0
if node._left is not None:
count+=1
if node._right is not None:
count+=1
return count
#非公开更新方法
def _add_root(self,e):
'''添加根节点,假如已经有根节点,抛出错误'''
if self._root is not None:raise ValueError('Root exists')
self._size+=1
self._root=self._Node(e)
return self._make_position(self._root)
def _add_left(self,p,e):
'''给节点p添加左孩子e,如果已经有左孩子,抛出错误'''
node=self._validate(p)
if node._left is not None:raise ValueError('Left child exists')
self._size+=1
node._left=self._Node(e,node)
return self._make_position(node._left)
def _add_right(self,p,e):
'''给节点p添加右孩子e,如果已经有右孩子,抛出错误'''
node=self._validate(p)
if node._right is not None:raise ValueError('Right child exists')
self._size+=1
node._right=self._Node(e,node)
return self._make_position(node._right)
def _replace(self,p,e):
'''用e代替p位置的元素,并返回被替换的元素'''
node=self._validate(p)
old=node._element
node._element=e
return old
def _delete(self,p):
'''删除位置p的节点,并用他的孩子代替他(如果有孩子),并返回p位置的元素,
如果有两个孩子,抛出错误'''
node=self._validate(p)
if self.num_children(p)==2:raise ValueError('p has two children')
child=node._left if node._left else node._right
if child is not None:
child._parent=node._parent#爷爷变成孩子的父亲
if node is self._root:
self._root=child
else:
parent=node._parent
if node is parent._left:
parent._left=child
else:
parent._right=child
self._size-=1
node._parent=node
return node._element
def _attach(self,p,t1,t2):
'''把树ti和t2当成左右孩子给叶节点p,并清空t1,t2'''
node=self._validate(p)
if not self.is_leaf(p):raise ValueError('position must be leaf')
if not type(self) is type(t1) is type(t2):
raise TypeError('Tree types must match')
self._size+=len(ti)+len(t2)
if not t1.is_empty():
t1._root._parent=node
node._left=t1._root
t1._root=None
t1._size=0
if not t2.is_empty():
t2._root._parent=node
node._right=t2._root
t2._root=None
t2._size=0