那么我们怎么才能实现一个有这三个属性的简单二叉树呢?
- class BinaryTree:
- def __init__(self, value):
- self.value = value
- self.left_child = None
- self.right_child = None
好,这就是我们的二叉树类。
当我们实例化一个对象时,我们把值(节点的相干数据)作为参数传递给类。看膳绫擎类的左孩子和右孩子。两个都被赋值为None。
好,插入停止。
为什么?
测试下代码。
- tree = BinaryTree('a')
- print(tree.value) # a
- print(tree.left_child) # None
- print(tree.right_child) # None
好了。
我们可以将字符串'a'作为值传给二叉树节点。如不雅将值、左孩子、右孩子输出的话,我们就可以看到这个值了。
下面开端插入部分的操作。那么我们须要做些什么工作呢?
有两个请求:
- 如不雅当前的节点没有左孩子,我们就创建一个新节点,然后将其设置为当前节点的左孩子。
- 如不雅已经有了左孩子,我们就创建一个新节点,并将其放在当缁ん孩子节点的地位。然后再将左孩子节点置为新节点的左孩子。
画出来就像下面如许。:)
下面是插入操作的代码:
- def insert_left(self, value):
- if self.left_child == None:
- self.left_child = BinaryTree(value)
- else:
- new_node = BinaryTree(value)
- new_node.left_child = self.left_child
- self.left_child = new_node
再次强调,如不雅当前节点没有左孩子,我们就创建一个新节点,并将其置为当前节点的左孩子。不然,就将新节点放在左孩子的地位,再将原左孩子置为新节点的左孩子。
因为当我们创建节点时,它还没有孩子,只有节点数据。
同样,我们编写插入右孩子的代码。
深度优先搜刮(Depth-First Search,DFS)
想象一个有所有辈分关系的家谱:祖父母、父母、后代、兄弟姐妹们等等。我们平日按层次构造组织家谱。
- def insert_right(self, value):
- if self.right_child == None:
- self.right_child = BinaryTree(value)
- else:
- new_node = BinaryTree(value)
- new_node.right_child = self.right_child
- self.right_child = new_node
好了。:)
然则这还不算完成。我们得测试一下。
总结分析下这棵树:
- 有一个根节点
- b是左孩子
- c是右孩子
- b的右孩子是d(b没有左孩子)
- c的左孩子是e
- c的右孩子是f
- e和f都没有孩子
下面是整棵树的实现代码:
- a_node = BinaryTree('a')
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 Mac 中有一个搁笔是「黑色的窗口」名为「终端 Terminal」的应用,对于一个通俗人用户来说,它就似乎有一>>>详细阅读
本文标题:数据结构中你需要知道的关于树的一切
地址:http://www.17bianji.com/lsqh/38849.html
1/2 1