1. python里面二项树怎么表示
class Tree:
def __init__(self,entry,left=None,right=None):
self.entry=entry
self.left=left
self.right=right
def __repr__(self):
args=repr(self.entry)
if self.left or self.right:
args+=',{0},{1}'.format(repr(self.left),repr(self.right))
return 'Tree({0})'.format(args)
def square_tree(t):
if t==None:
return
else:
t.entry=t.entry**2
square_tree(t.left)
square_tree(t.right)
def height(t):
if t==None:
return 0
else:
return 1+max(height(t.left),height(t.right))
def size(t):
if t==None:
return 0
else:
return size(t.left)+size(t.right)+1
def find_path(t,x):
if t==None:
return None
elif t.entry==x:
return (x,)
left=find_path(t.left,x);right=find_path(t.right,x)
if left:
return (t.entry,)+left
elif right:
return (t.entry,)+right
else:
return None
t=Tree(2,Tree(7,Tree(2),Tree(6,Tree(5),Tree(11))),Tree(15))
print(t)
a=find_path(t,5)
print(a)
2. 用python画一棵树
1、准备
1
打开我们的Python shell界面,也就是大家所说的idle界面。
3. python中的数据结构分析
1.Python数据结构篇
数据结构篇主要是阅读[Problem Solving with Python](Welcome to Problem Solving with Algorithms and Data Structures) [该网址链接可能会比较慢]时写下的阅读记录,当然,也结合了部分[算法导论](Introction to Algorithms)
中的内容,此外还有不少wikipedia上的内容,所以内容比较多,可能有点杂乱。这部分主要是介绍了如何使用Python实现常用的一些数据结构,例
如堆栈、队列、二叉树等等,也有Python内置的数据结构性能的分析,同时还包括了搜索和排序(在算法设计篇中会有更加详细的介绍)的简单总结。每篇文
章都有实现代码,内容比较多,简单算法一般是大致介绍下思想及算法流程,复杂的算法会给出各种图示和代码实现详细介绍。
**这一部分是下
面算法设计篇的前篇,如果数据结构还不错的可以直接看算法设计篇,遇到问题可以回来看数据结构篇中的某个具体内容充电一下,我个人认为直接读算法设计篇比
较好,因为大家时间也都比较宝贵,如果你会来读这些文章说明你肯定有一定基础了,后面的算法设计篇中更多的是思想,这里更多的是代码而已,嘿嘿。**
(1)[搜索](Python Data Structures)
简述顺序查找和二分查找,详述Hash查找(hash函数的设计以及如何避免冲突)
(2)[排序](Python Data Structures)
简述各种排序算法的思想以及它的图示和实现
(3)[数据结构](Python Data Structures)
简述Python内置数据结构的性能分析和实现常用的数据结构:栈、队列和二叉堆
(4)[树总结](Python Data Structures)
简述二叉树,详述二叉搜索树和AVL树的思想和实现
2.Python算法设计篇
算法设计篇主要是阅读[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)[**点击链接可进入Springer免费下载原书电子版**]之后写下的读书总结,原书大部分内容结合了经典书籍[算法导论](Introction to Algorithms),
内容更加细致深入,主要是介绍了各种常用的算法设计思想,以及如何使用Python高效巧妙地实现这些算法,这里有别于前面的数据结构篇,部分算法例如排
序就不会详细介绍它的实现细节,而是侧重于它内在的算法思想。这部分使用了一些与数据结构有关的第三方模块,因为这篇的重点是算法的思想以及实现,所以并
没有去重新实现每个数据结构,但是在介绍算法的同时会分析Python内置数据结构以及第三方数据结构模块的优缺点,也就意味着该篇比前面都要难不少,但
是我想我的介绍应该还算简单明了,因为我用的都是比较朴实的语言,并没有像算法导论一样列出一堆性质和定理,主要是对着某个问题一步步思考然后算法就出来
了,嘿嘿,除此之外,里面还有很多关于python开发的内容,精彩真的不容错过!
这里每篇文章都有实现代码,但是代码我一般都不会分
析,更多地是分析算法思想,所以内容都比较多,即便如此也没有包括原书对应章节的所有内容,因为内容实在太丰富了,所以我只是选择经典的算法实例来介绍算
法核心思想,除此之外,还有不少内容是原书没有的,部分是来自算法导论,部分是来自我自己的感悟,嘻嘻。该篇对于大神们来说是小菜,请一笑而过,对于菜鸟
们来说可能有点难啃,所以最适合的是和我水平差不多的,对各个算法都有所了解但是理解还不算深刻的半桶水的程序猿,嘿嘿。
本篇的顺序按照原书[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)的章节来安排的(章节标题部分相同部分不同哟),为了节省时间以及保持原着的原滋原味,部分内容(一般是比较难以翻译和理解的内容)直接摘自原着英文内容。
**1.
你也许觉得很多内容你都知道嘛,没有看的必要,其实如果是我的话我也会这么想,但是如果只是归纳一个算法有哪些步骤,那这个总结也就没有意义了,我觉得这
个总结的亮点在于想办法说清楚一个算法是怎么想出来的,有哪些需要注意的,如何进行优化的等等,采用问答式的方式让读者和我一起来想出某个问题的解,每篇
文章之后都还有一两道小题练手哟**
**2.你也许还会说算法导论不是既权威又全面么,基本上每个算法都还有详细的证明呢,读算法导论岂
不更好些,当然,你如果想读算法导论的话我不拦着你,读完了感觉自己整个人都不好了别怪小弟没有提醒你哟,嘻嘻嘻,左一个性质右一个定理实在不适合算法科
普的啦,没有多少人能够坚持读完的。但是码农与蛇的故事内容不多哟,呵呵呵**
**3.如果你细读本系列的话我保证你会有不少收获的,需要看算法导论哪个部分的地方我会给出提示的,嘿嘿。温馨提示,前面三节内容都是介绍基础知识,所以精彩内容从第4节开始哟,么么哒 O(∩_∩)O~**
(1)[Python Algorithms - C1 Introction](Python Algorithms)
本节主要是对原书中的内容做些简单介绍,说明算法的重要性以及各章节的内容概要。
(2)[Python Algorithms - C2 The basics](Python Algorithms)
**本节主要介绍了三个内容:算法渐近运行时间的表示方法、六条算法性能评估的经验以及Python中树和图的实现方式。**
(3)[Python Algorithms - C3 Counting 101](Python Algorithms)
原书主要介绍了一些基础数学,例如排列组合以及递归循环等,但是本节只重点介绍计算算法的运行时间的三种方法
(4)[Python Algorithms - C4 Inction and Recursion and Rection](Python Algorithms)
**本节主要介绍算法设计的三个核心知识:Inction(推导)、Recursion(递归)和Rection(规约),这是原书的重点和难点部分**
(5)[Python Algorithms - C5 Traversal](Python Algorithms)
**本节主要介绍图的遍历算法BFS和DFS,以及对拓扑排序的另一种解法和寻找图的(强)连通分量的算法**
(6)[Python Algorithms - C6 Divide and Combine and Conquer](Python Algorithms)
**本节主要介绍分治法策略,提到了树形问题的平衡性以及基于分治策略的排序算法**
(7)[Python Algorithms - C7 Greedy](Python Algorithms)
**本节主要通过几个例子来介绍贪心策略,主要包括背包问题、哈夫曼编码和最小生成树等等**
(8)[Python Algorithms - C8 Dynamic Programming](Python Algorithms)
**本节主要结合一些经典的动规问题介绍动态规划的备忘录法和迭代法这两种实现方式,并对这两种方式进行对比**
(9)[Python Algorithms - C9 Graphs](Python Algorithms)
**本节主要介绍图算法中的各种最短路径算法,从不同的角度揭示它们的内核以及它们的异同**
4. Python中的树你知道吗
树与二叉树
在了解二叉树之前,我们要先了解树的一些概念,方便我们对二叉树的理解。
什么是树?
树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。
它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
每个节点有零个或多个子节点;
没有父节点的节点称为根节点;
每一个非根节点有且只有一个父节点;
除了根节点外,每个子节点可以分为多个不相交的子树;
树的术语:
节点的度: 一个节点含有的子树的个数称为该节点的度;
树的度: 一棵树中,最大的节点的度称为树的度;
根结点: 树的最顶端的节点,继续往下分为子节点
父节点: 子节点的上一层为父节点
兄弟节点: 具有同一个父节点的节点称为兄弟节点
叶子节点/终端节点: 不再有子节点的节点为叶子节点
二叉树:
二叉树是树的特殊一种,具有如下特点:
每个节点最多有两个子树,节点的度最大为2
左子树和右子树是有顺序的,次序不能颠倒
即是某节点只有一个子树,也要区分左右子树
二叉树的性质:
在非空二叉树的第i层,最多有2i-1个节点(i>=1)
在深度为K的二叉树上最多有2k-1个节点(k>.1)
对于任意一个非空的二叉树,如果叶子节点个数为n0,度数为2的节点数为n2,则有n0=n2+1
推倒过程:在一棵二叉树中,除了叶子节点(度为0)外,就剩下度为2(n2)和度为1(n1)的节点了。则树的节点总数为T = n0 + n1 + n2;在二叉树中节点总数为T,而连线总数为T-1 = 2*n2 + n1,所以就有:n0 + n1 + n2 - 1 = 2 *n2 + n1,得到n0=n2+1。
特殊的二叉树
满二叉树
在二叉树中除了叶子节点,其他所有节点的度为2,且所有的叶子节点都在同一层上,这样的二叉树成为满二叉树。
满二叉树的特点:
叶子节点只能出现在最下一层
非叶子节点度数一定为2
在同样深度的二叉树中,满二叉树的节点个数最多,叶子节点数最多
完全二叉树
如果二叉树中除去最后一层叶子节点后为满二叉树,且最后一层的叶子节点依次从左到右分布,则这样的二叉树称为完全二叉树
完全二叉树的特点:
叶子节点一般出现在最下一层,如果倒数第二层出现叶子节点,一定出现在右部连续位置
最下层叶子节点一定集中在左部连续位置
同样节点的二叉树,完全二叉树的深度最小(满二叉树也对)
小例题:
某完全二叉树共有200个节点,该二叉树中共有()个叶子节点?
解:n0 + n1 + n2 = 200, 其中n0 = n2 + 1,n1 = 0或者1 (n1=1,出现在最下一层节点数为奇数,最下一层节点数为偶数,则n1=0), 因为n0为整数,所以最后算得n0 = 100。
完全二叉树的性质:
具有n个节点的完全二叉树的深度为log2n+1。log2n结果取整数部分。
如果有一棵有n个节点的完全二叉树的节点按层次序编号,对任一层的节点i(1 <= i <= n)
1. 如果i=1,则节点是二叉树的根,无父节点,如果i>1,则其父节点为i/2,向下取整
2. 如果2*1>n,那么节点i没有左孩子,否则其左孩子为2i
3. 如果2i+1>n那么节点没有右孩子,否则右孩子为2i+1
验证:
第一条:
当i=1时,为根节点。当i>1时,比如结点为7,他的双亲就是7/2= 3;结点9双亲为4.
第二条:
结点6,62 = 12>10,所以结点6无左孩子,是叶子结点。结点5,52 = 10,左孩子是10,结点4,为8.
第三条:
结点5,2*5+1>10,没有右孩子,结点4,则有右孩子。
更多Python相关知识,请移步Python视频教程继续学习!!
5. python 二叉树实现思想
第一 :return 的缩进不对 ,
ifself.root==None:
self.root=node
return#如果这里不缩进,下面的语句无意义,直接返回,不会执行。
while queue这个循环的作用的是从root根结点开始,向下查找第一个左(右)子结点为空的结点,将node插入这个位置,queue的作用是将查找到的非空子结点保存在queue中,然后依次向下查找这些子结点的左右子结点
6. 网易游戏和腾讯游戏的服务端是用什么语言开发的
服务端不同的引擎用的不同的语言,但是核心都是C++写的。
unity是C#+lua,lua有很多插件xlua 和slua等等。
UE4是C++配合unlua。
网易服务器是自研服务端引擎,一般是lpc、python或者lua
7. Python 二叉树的创建和遍历、重建
几个有限元素的集合,该集合为空或者由一个根(Root)的元素及两不相交的(左子树和右子树)的二叉树组成,是有序树,当集合为空时,称为空二叉树,在二叉树中,一个元素也称为一个结点。
前序遍历:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树
中序遍历:若树为空,则空操作返回,否则从根结点开始(不是先访问根结点),中序遍历根结点的左子树,然后访问根节点,最后中序遍历右子树。
后序遍历:若树为空,则空操作返回,否则从左到右先访问叶子结点后结点的方式遍历左右子树,最后访问根节点。
层序遍历:若树为空,则空操作返回,否则从树的每一层,即从根节点开始访问,从上到下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。
假设已知后序遍历和中序遍历结果,从后序遍历的结果可以等到最后一个访问的结点是根节点,对于最简单的二叉树,此时在中序遍历中找到根节点之后,可以分辨出左右子树,这样就可以重建出这个最简单的二叉树了。而对于更为复杂的二叉树,重建得到根结点和暂时混乱的左右结点,通过递归将左右结点依次重建为子二叉树,即可完成整个二叉树的重建。(在得到根结点之后,需要在中序遍历序列中寻找根结点的位置,并将中序序列拆分为左右部分,所以要求序列中不能有相同的数字,这是序列重建为二叉树的前提。)
Root =None
strs="abc##d##e##" #前序遍历扩展的二叉树序列
vals =list(strs)
Roots=Create_Tree(Root,vals)#Roots就是我们要的二叉树的根节点。
print(Roots)
inorderSearch = inOrderTraverse2(Roots)
print(inorderSearch)
8. python中 怎么把输入是一个有包含关系的列表 生成树形数据结构
fatherid就是节点在list中的下标,childreni[]放所有子节点在list中的下标,总之就是用下标来标记