python多叉树遍历,python实现二叉树遍历
二叉树是一种特殊的树,最直观的体现在它的每个节点最多有两个子节点。二叉树是一种非常实用的数据结构,常用来实现二叉查找树和二叉堆。以下文章主要介绍python二叉树类及其四种遍历方法,有需要的可以参考。
00-1010前言示例代码:相关阅读:摘要
目录
之前研究过binarytree的第三方库,了解过其定义的基本用法。
昨天,当我在问答中做一个问题的时候。一个频道,碰到一个关于二叉树算法的填空题。感觉代码不错,值得学习,所以整理了代码,分享如下:
前言
在从集合导入队列#层的遍历中使用的队列数据类型
类BTNode: #二进制链中的节点类
def __init__(self,d=None):
Self.data=d #节点值
Self.lchild=None #左hai子指针
Self.rchild=None # right hai子指针
Classbtree 3360 #二叉树类
def __init__(self,d=None):
Self.b=None #根节点指针
Def DispBTree(self): #返回二进制链的括号字符串。
回归自我。_DispBTree1(self.b)
Def _DispBTree1(self,t): #由DispBTree方法调用
T==none3360 #空树返回空字符串
返回“”
else:
Bstr=t.data #输出根节点值
如果t.lchild!=None或t.rchild!=无:
Bstr=( # Output (当有hai子节点时)
BSTR=自我。_ dispbtree 1 (t.lchild) #递归输出左子树
如果t.rchild!=无:
Bstr=, #有右hai子节点时输出,
BSTR=自我。_ dispbtree 1 (t.rchild) #递归输出右边的子树
Bstr=) # output )
返回bstr
Def node (self,x) : #查找值为x的节点的算法
回归自我。_FindNode1(self.b,x)
Def _FindNode1(self,t,x): #由FindNode方法调用
如果t==None:
none # t为空时返回null
elif t.data==x:
t #t当T表示的节点值为x时,返回T # T。
else:
P=自我。_FindNode1(t.lchild,x) #在左边的子树中查找。
如果p!=无:
返回p #在左子树中找到p节点,返回p。
else:
返回。_ find node 1(t . r chid,x) #返回右边子树中的搜索结果
求二叉树高度的DEF HEIGHT (SELF) 3360 #算法
回归自我。_Height1(自身b)
Def _Height1(self,t): #由Height方法调用
如果t==None:
0 #空树的高度为0。
else:
Lh=自己。_Height1(t.lchild) #求左侧子树lchildh的高度
Rh=自我。_Height1(t.rchild) #找到右边的子树高度rc
hildh
return max(lh,rh)+1
def PreOrder(bt): #先序遍历的递归算法
_PreOrder(bt.b)
def _PreOrder(t): #被PreOrder方法调用
if t != None:
print(t.data,end = ) #访问根结点
_PreOrder(t.lchild) #先序遍历左子树
_PreOrder(t.rchild) #先序遍历右子树
def InOrder(bt): #中序遍历的递归算法
_InOrder(bt.b)
def _InOrder(t): #被InOrder方法调用
if t != None:
_InOrder(t.lchild) #中序遍历左子树
print(t.data,end = ) #访问根结点
_InOrder(t.rchild) #中序遍历右子树
def PostOrder(bt): #后序遍历的递归算法
_PostOrder(bt.b)
def _PostOrder(t): #被PostOrder方法调用
if t != None:
_PostOrder(t.lchild) #后序遍历左子树
_PostOrder(t.rchild) #后序遍历右子树
print(t.data,end = ) #访问根结点
def LevelOrder(bt): #层序遍历的算法
qu = deque() #将双端队列作为普通队列qu
qu.append(bt.b) #根结点进队
while len(qu)>0: #队不空循环
p = qu.popleft() #出队一个结点
print(p.data,end = ) #访问p结点
if p.lchild != None: #有左hai子时将其进队
qu.append(p.lchild)
if p.rchild != None: #有右hai子时将其进队
qu.append(p.rchild)
def CreateBTree2(posts,ins): #由后序序列posts和中序序列ins构造二叉链
bt = BTree()
bt.b = _CreateBTree2(posts,0,ins,0,len(posts))
return bt
def _CreateBTree2(posts,i,ins,j,n):
if n <= 0:
return None
d = posts[i+n-1] #取后序序列尾元素d
t = BTNode(d) #创建根结点(结点值为d)
p = ins.index(d) #在ins中找到根结点的索引
k = p-j #确定左子树中结点个数k
t.lchild = _CreateBTree2(posts,i,ins,j,k) #递归构造左子树
t.rchild = _CreateBTree2(posts,i+k,ins,p+1,n-k-1) #递归构造右子树
return t
if __name__ == __main__:
inlst = [D,G,B,A,E,C,F]
posts = [G,D,B,E,F,C,A]
print(f"中序列表 :{inlst}")
print(f"后序列表 :{posts}")
#构造二叉树bt
bt = BTree()
bt = CreateBTree2(posts,inlst)
print(f"\n构造二叉树:{bt.DispBTree()}")
x = F
if bt.FindNode(x):
print(f"bt中存在 :{x}")
else:
print(f"bt中不存在 :{x}")
print(f"bt的高度 :{bt.Height():^3}")
print("\n先序遍历 :",end=)
PreOrder(bt)
print("\n中序遍历列 :",end=)
InOrder(bt)
print("\n后序遍历 :",end=)
PostOrder(bt)
print("\n层序遍历 :",end=)
LevelOrder(bt)
中序列表:['D', 'G', 'B', 'A', 'E', 'C', 'F']
后序列表:['G', 'D', 'B', 'E', 'F', 'C', 'A']构造二叉树:A(B(D(,G),C(E,F))
bt中存在 :'F'
bt的高度 : 4先序遍历 :A B D G C E F
中序遍历 :D G B A E C F
后序遍历 :G D B E F C A
层序遍历 :A B C D E F G
相关阅读内容:
- Python 初识二叉树,新手也秒懂!
- Python 初识二叉树,新手也秒懂!(续:实战binarytree)
总结
到此这篇关于python二叉树类以及其4种遍历方法的文章就介绍到这了,更多相关python二叉树类遍历内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。