python表示二叉树_在Python中使用类和字典来表示二叉树有什么区别?

What is the difference between using a class and a dictionary to represent a binary tree in Python?

在语义学上没有什么大的区别。主要区别在于每种方法的可用性。在

正如您已经观察到的,字典和对象都可以用来表示二叉树。但是,使用对象为二叉树提供了一个更方便和可读的接口。在

为什么?让我们看一个例子。假设你有二叉树:1

/ \

2 3

/ / \

5 7 9

好吧,太好了。现在假设我们要访问树根的右节点。有了字典,看起来像:

^{pr2}$

对象将是:tree.right

好的,现在让我们假设我们要得到正确的节点,右节点的,二叉树的根。换句话说,9。同样,这是使用字典时的效果:tree[tree[1][1]][1]

对象将是:tree.right.right

你开始明白我的意思了吗?当然,对于一个有几个节点的小二叉树来说,使用字典可能看起来不错,但是树越大,你必须走得越深,使用字典的方法就越难看,更不可读。在

当您想开始在二叉树中执行插入和删除之类的操作时,字典方法会变得更糟。执行这些操作需要有一个定义良好的根节点。使用字典进行模拟非常麻烦,因为它没有固定的顺序,与使用对象的层次结构不同:# insertion

def insert(key, root, tree):

if root is None:

return Node(key)

elif key < root:

tree[root][0] = insert(key, tree[root][0], tree)

else:

tree[root][1] = insert(key, tree[root][1], tree)

return root

# deletion

def min_value(node, tree):

current = node

while tree[current][0] is not None:

current = tree[current][0]

return current

def delete(root, key, tree):

if root is None:

return root

if key < root:

tree[root][0] = delete(tree[root][0], key, tree)

elif key < root:

tree[root][1] = delete(tree[root][1], key, tree)

else:

if tree[root][0] is None:

temp = tree[root][1]

return temp

elif tree[root][1] is None:

temp = tree[root][0]

return temp

temp = min_value(tree[root][1], tree)

tree[root] = tree[temp]

tree[temp] = tree.pop(root)

tree[root][1] = delete(tree[root][1], temp)

return root

通过使用诸如left、right和key等命名属性,上述方法的可读性将更加清晰。在

那么,总而言之,使用类和字典来表示二叉树有什么区别呢?区别在于代码的可读性、可用性、可维护性和结构。想要我的建议吗?最后,使用类而不是字典是正确的选择。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值