作家
登录

数据结构中你需要知道的关于树的一切

作者: 来源: 2017-11-14 14:33:42 阅读 我要评论

那么我们怎么才能实现一个有这三个属性的简单二叉树呢?

  1. class BinaryTree: 
  2.     def __init__(self, value): 
  3.         self.value = value 
  4.         self.left_child = None 
  5.         self.right_child = None 

好,这就是我们的二叉树类。

当我们实例化一个对象时,我们把值(节点的相干数据)作为参数传递给类。看膳绫擎类的左孩子和右孩子。两个都被赋值为None。

好,插入停止。

数据构造中你须要知道的关于树的一切

为什么?

测试下代码。

  1. tree = BinaryTree('a'
  2. print(tree.value) # a 
  3. print(tree.left_child) # None 
  4. print(tree.right_child) # None 

好了。

我们可以将字符串'a'作为值传给二叉树节点。如不雅将值、左孩子、右孩子输出的话,我们就可以看到这个值了。

下面开端插入部分的操作。那么我们须要做些什么工作呢?

有两个请求:

  • 如不雅当前的节点没有左孩子,我们就创建一个新节点,然后将其设置为当前节点的左孩子。
  • 如不雅已经有了左孩子,我们就创建一个新节点,并将其放在当缁ん孩子节点的地位。然后再将左孩子节点置为新节点的左孩子。

画出来就像下面如许。:)

数据构造中你须要知道的关于树的一切

下面是插入操作的代码:

  1. def insert_left(self, value): 
  2.     if self.left_child == None: 
  3.         self.left_child = BinaryTree(value) 
  4.     else
  5.         new_node = BinaryTree(value) 
  6.         new_node.left_child = self.left_child 
  7.         self.left_child = new_node 

再次强调,如不雅当前节点没有左孩子,我们就创建一个新节点,并将其置为当前节点的左孩子。不然,就将新节点放在左孩子的地位,再将原左孩子置为新节点的左孩子。

因为当我们创建节点时,它还没有孩子,只有节点数据。

同样,我们编写插入右孩子的代码。

深度优先搜刮(Depth-First Search,DFS)

想象一个有所有辈分关系的家谱:祖父母、父母、后代、兄弟姐妹们等等。我们平日按层次构造组织家谱。

  1. def insert_right(self, value): 
  2.     if self.right_child == None: 
  3.         self.right_child = BinaryTree(value) 
  4.     else
  5.         new_node = BinaryTree(value) 
  6.         new_node.right_child = self.right_child 
  7.         self.right_child = new_node 

好了。:)

然则这还不算完成。我们得测试一下。

数据构造中你须要知道的关于树的一切

总结分析下这棵树:

  • 有一个根节点
  • b是左孩子
  • c是右孩子
  • b的右孩子是d(b没有左孩子)
  • c的左孩子是e
  • c的右孩子是f
  • e和f都没有孩子

下面是整棵树的实现代码:

  1. a_node = BinaryTree('a'

      推荐阅读

      简单几条命令,轻松开启MacOS系统隐藏功能

    Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 Mac 中有一个搁笔是「黑色的窗口」名为「终端 Terminal」的应用,对于一个通俗人用户来说,它就似乎有一>>>详细阅读


    本文标题:数据结构中你需要知道的关于树的一切

    地址:http://www.17bianji.com/lsqh/38849.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)