1 实现树结构的列表方法是:嵌套列表法
这里把我踩的坑记录一下

'''
使用嵌套列表法实现树的基本功能
'''def BinaryTree(r):return [r, [], []]def insertLeft(root, newBranch):t = root.pop(1)if len(t) > 1:# 如果左子树非空,就把原来根节点上的左子树作为新的根的左节点的左子树root.insert(1, [newBranch, t, []])else:# 如果左子树为空,就直接插入新的树作为根节点的左子树root.insert(1, [newBranch, [], []])return rootdef insertRight(root, newBranch):t = root.pop(2)if len(t) > 1:root.insert(2, [newBranch, [], t])else:root.insert(2, [newBranch, [], []])return rootdef getRootVal(root):return root[0]def setRootVal(root, newVal):root[0] = newValdef getLeftChild(root):return root[1]def getRightChild(root):return root[2]r = BinaryTree(3)
insertLeft(r, 4)
insertLeft(r, 5)
insertRight(r, 6)
insertRight(r, 7)
l = getLeftChild(r)
print(l)
print(r)

这里需要强调的是,当在一棵树中插入新的节点或者分支时,应该首先要明确的是新的节点或分支的根是谁,这是插入任何节点或分支的先决条件,一般来说,不会一直往根节点插入新的节点或分支。
2 实现树结构的第二种方法是使用链表

'''
用节点链接法实现树
每个节点保存根节点的数据项,以及指向左右子树的链接
'''
class BinaryTree:def __init__(self, rootObj):# 成员key保存够根节点数据项# 成员left/rightChild保存指向左/右子树的引用(同样是BinaryTree)self.key = rootObjself.leftChild = Noneself.rightChild = Nonedef insertLeft(self, newNode):if self.leftChild == None:self.leftChild = BinaryTree(newNode)else:t = BinaryTree(newNode)t.leftChild = self.leftChildself.leftChild = tdef insertRight(self, newNode):if self.rightChild == None:self.rightChild = BinaryTree(newNode)else:t = BinaryTree(newNode)t.rightChild = self.rightChildself.rightChild = tdef getRightChild(self):return self.rightChilddef getLeftChild(self):return self.leftChilddef setRootVal(self, obj):self.key = objdef getRootVal(self):return self.keyr = BinaryTree('a')
r.insertLeft('b')
r.insertRight('c')
r.getRightChild().setRootVal('hello')
r.getLeftChild().insertRight('d')

Python实现树结构的两种方式相关推荐

  1. Py之qrcode:调用python的qrcode库两种方式生成二维码、带logo的二维码

    Py之qrcode:调用python的qrcode库两种方式生成二维码.带logo的二维码 目录 python编程实现生成二维码 1.第一种方式-纯文本 2.第二种方式-带logo

  2. 运用python的方式_对Python使用mfcc的两种方式详解

    1.Librosa import librosa filepath = "/Users/birenjianmo/Desktop/learn/librosa/mp3/in.wav" ...

  3. Python实现屏幕截图的两种方式

    Python实现屏幕截图的两种方式 使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释. 一.Python调用windows API实现屏幕截图 好处 ...

  4. Python图片裁剪的两种方式——Pillow和OpenCV

    本文参考Python图片裁剪的两种方式--Pillow和OpenCV并进行了一些更新 感谢作者:hfutdog 在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一 ...

  5. python解释器在哪里_详解查看Python解释器路径的两种方式

    进入python的安装目录, 查看python解释器 进入bin目录 # ls python(看一下是否有python解释器版本) # pwd (查看当前目录) 复制当前目录即可 1. 通过脚本查看 ...

  6. python: 多线程实现的两种方式及让多条命令并发执行

    一 概念介绍 Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading. ...

  7. 【Python】Python figure显示的两种方式

    1. 两种方式: 终端输出图像 新窗口输出图像 2. 终端输出命令: %matplotlib inline 新窗口输出命令: %matplotlib qt5 注意此两个语句是命令行输入,若在spyde ...

  8. python程序执行的两种方式_012.执行Python程序的两种方式

    一.执行Python程序的两种方式 1.1 交互式 在终端内输入python3,然后输入python代码 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉 ...

  9. Python文件修改的两种方式

    文件的数据是存放于硬盘上的,因而只存在覆盖.不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式. # 一.方式一 将硬盘存放的该文件的内容全部加载到内存,在内存中是 ...

最新文章

  1. 一个分号将代码效率提升100倍
  2. JavaScript 如果拥有多线程能力会怎样?
  3. JAVA进制及进制之间的转换
  4. anaconda写python代码视频_如何安装Python运行环境Anaconda?(视频教程)
  5. java字典树(Trie)实现中文模糊匹配
  6. Linux wc命令用于计算字数。
  7. warning C4251编译警告解决办法
  8. 解决win2003默认不能使用移动硬盘的问题
  9. JavaScript学习笔记(七)
  10. H5与客户端交互的方式有哪些? 怎么做?
  11. 申通上云?技术详解! | 凌云时刻
  12. 软件测试的支付流程图,软件测试流程图案例.doc
  13. HCIE大师之路(三)——QOS综合实验
  14. 真解决EasyUi的 select 使用 class=“easyui-combobox“ 样式绑定onSelect/onChange事件
  15. R语言:SVD分解求解线性方程组AX=b
  16. 什么是CI/CD,以及我所熟知的CI/CD工具都是有哪些?
  17. 链表的中间结点--快慢指针思想
  18. 从零开始学习信号完整性(SIPI)--2
  19. 非对称加密实战(一):JDK生成keystore获取公钥私钥及代码验证【附源码】
  20. EXCEL(Power BI)获取天天基金网每日历史净值数据,我去,这也太简单了吧!

热门文章

  1. 20款开发运维必备的顶级工具,速收
  2. php设计模式经典实例集合
  3. 食堂计费系统服务器,食堂消费系统解决方案
  4. 元宇宙:6层框架和3个核心底层技术
  5. Perl,PHP,Python,Ruby概要及各自特点
  6. Oracle培训记录
  7. 离散傅里叶变换(DFT/IDFT、FFT/IFFT)运算量的讨论
  8. jQueryHTML5 UI框架Ignite UI 13.2新功能大揭秘(二)
  9. Git版本控制总结——使用Git只要这篇就够了
  10. 【C++实验一】 实现CMatrix类