- 一个节点是其所有出边所连接节点的父节点
7.兄弟节点Sibling
- 具有同一个父节点的节点之间称为兄弟节点
8.子树Subtree
- 一个节点和其所有子孙节点,以及相关边的集合
9.叶子节点Leaf
-
没有子节点的节点称为叶子节点
-
根节点的层级为0
10.层级Level
- 从根节点开始到达一个节点的路径, 所包含的边的数量,称为这个节点的层级。
11.高度
- 树中所有节点的最大层数称为树的高度
12.树的定义1
- 树由若干节点,以及两两连接节点的边组成,并有如下性质
其中一个节点被设定为根;
每个节点n(除根节点),都恰连接一 条来自节点p的边, p是n的父节点;
每个节点从根开始的路径是唯一的
如果每个节点最多有两个子节点, 这样的树称为“ 二叉树”
13.树的定义2(递归定义)
- 树是:空集;
或者由根节点及0或多个子树构成(其中子树也是树),每个子树的根到根节点具有边相连。
-
用Python List来实现二叉树树数据结构;
-
归的嵌套列表实现二叉树,由具有3个元素的列表实现:
第1个元素为根节点的值;
第2个元素是左子树(所以也是一个列表);
第3个元素是右子树(所以也是一个列表)。
[root,;left,right]
- 嵌套列表法的优点
子树的结构与树相同,是一种递归数据结构
很容易扩展到多叉树,仅需要增加列表元素即可
- 例
myTree = [‘a’,
[‘b’, [‘d’,[],[]] , [‘e’,[],[]] ],
[‘c’, [‘f’,[],[]] , [] ]
]
- 我们通过定义一系列函数来辅助操作嵌套列表
BinaryTree创建仅有根节点的二叉树
insertLeft/insertRight将新节点插入树中作为其直接的左/右子节点
get/setRootVal则取得或设置根节点
getLeft/RightChild返回左/右子树
def BinaryTree®:
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 root
def insertRight( root , newBranch):
t = root.pop(2)
if len(t) > 1:
root.insert(2, [newBranch,[],t])
else:
root.insert(2, [newBranch,[],[]])
return root
def getRootVal(root):
return root[0]
def setRootVal (root, newVal):
root[0] = newVal
def 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®
print(l)
setRootVal(l,9)
print®
insertLeft(l,11)
print®
print(getRightChild(getRightChild®))
#结果
“”"
[5, [4, [], []], []]
[3, [9, [4, [], []], []], [7, [], [6, [], []]]]
[3, [9, [11, [4, [], []], []], []], [7, [], [6, [], []]]]
[6, [], []]
“”"
- 可以用节点链接法来实现树
每个节点保存根节点的数据项,以及指向左右子树的链接
- 代码
class BinaryTree:
def init( self , rootObj):
self.key = rootObj
self.leftChild = None
self.rightChild = None
def insertLeft(self,newNode):
if self.leftChild == None:
self.leftChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.leftChild = self.leftChild
self.leftChild = t
def insertRight(self, newNode):
if self.rightChild == None:
self.rightChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.rightChild = self.rightChild
self.rightChild = t
def getRightChild(self):
return self.rightChild
def getLeftChild(self):
return self.leftChild
def setRootVal(self, obj):
self.key = obj
def getRootVal(self):
return self.key
r = BinaryTree(‘a’)
r.insertLeft( ‘b’ )
r.insertRight(‘c’)
r.getRightChild().setRootVal( ‘hello’)
r.getLeftChild().insertRight(‘d’)
1.树的应用:解析树(语法树)
-
将树用于表示语言中句子,可以分析句子的各种语法成分,对句子的各种成分进行处理
-
语法分析树 主谓宾,定状补
-
程序设计语言的编译 1.词法、语法检查 2.从语法树生成目标代码
-
自然语言处理 机器翻译、语义理解
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
(https://i-blog.csdnimg.cn/blog_migrate/e609d9de17e680ccba27f351612a0860.png#pic_center)
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-eHwUHroZ-1710875895037)]