1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 二叉树的创建_【数据结构用python描述】python创建二叉树

二叉树的创建_【数据结构用python描述】python创建二叉树

时间:2023-03-31 16:18:39

相关推荐

二叉树的创建_【数据结构用python描述】python创建二叉树

接下来一段时间小编会和大家一起学习数据结构用python描述。

C/C++可以通过使用链表来创建二叉树,当然python也可以,但是现在的问题是

python没有指针和引用。C/C++创建链表二叉树需要使用指针和引用,而python没有。

怎么办呢?

首先先来看一下变量在python中的储存机制,python是使用引用计数的办法。

通俗的说,在python中对于一个值来说就有一个地址,而在C/C++中一个变量有一个地址

在python当中一个变量的值改变的时候,他的地址就会发生改变

如:

a=10print(id(a))a=20print(id(a))"""输出结果:140721907888160140721907888480"""

python中除了列表、元组等序列类型可以发生改变一般的局部变量通过函数传递在函数中改变并不能改变变量的值。在python中变量传递都是引用传递

如:

def Change(L):print(id(L))#BL=10print(id(L))#Cdef main():L=5print(id(L))#AChange(L)print(L,id(L))main()"""输出结果:1407219078880001407219078880001407219078881605 140721907888000"""

我们可以发现A处和B处输出的地址是一样的,说明他们是同一个变量,则说明python的变量传递时引用传递。但是主函数main中的L的值并没有发生改变,C处的地址发生改变原因与最上面的原因一样。

由上面看我们发现函数传递的时候并不能改变实参。也就是说根节点左孩子和右孩子不能发生改变始终都是None,那么我们怎么解决这个问题呢?我们可以将得到的结点再返回去:

我们现在来创建一颗这样的二叉树:

#coding=gbkclass Binary_Tree():def __init__(self,data=0,Left_child=None,Right_child=None):#初始化变量self.data=dataself.Left_child=Left_child#左孩子self.Right_child=Right_child#右孩子def Creat_Binary_Tree(Root):if Data_Input[0]!=0:Root=Binary_Tree(Data_Input[0])#给Root赋给空间并且初始化Data_Input.pop(0)#pop处第一个数据,这样第一个数据就是原来的第二个位置上的数据如原来是[1,2,3]这样就变成[2,3]print(Data_Input)#输出当前列表中的元素Root.Left_child=Creat_Binary_Tree(Root.Left_child)Root.Right_child=Creat_Binary_Tree(Root.Right_child)return Root#将得到的节点返回else:Root=None#当data=0的时候就递归停止,就不继续产生节点Data_Input.pop(0)print(Data_Input)def Inorder(Root):if Root != None:Inorder(Root.Left_child)print(Root.data,end=' ')Inorder(Root.Right_child)Data_Input=[2,3,4,0,5,0,0,0,6,7,0,0,8,0,0]#创建二叉树需要的数据当data=0的时候就递归停止def main():Root=NoneRoot=Creat_Binary_Tree(Root)Inorder(Root)#中序遍历二叉树main()"""输出结果:[3, 4, 0, 5, 0, 0, 0, 6, 7, 0, 0, 8, 0, 0][4, 0, 5, 0, 0, 0, 6, 7, 0, 0, 8, 0, 0][0, 5, 0, 0, 0, 6, 7, 0, 0, 8, 0, 0][5, 0, 0, 0, 6, 7, 0, 0, 8, 0, 0][0, 0, 0, 6, 7, 0, 0, 8, 0, 0][0, 0, 6, 7, 0, 0, 8, 0, 0][0, 6, 7, 0, 0, 8, 0, 0][6, 7, 0, 0, 8, 0, 0][7, 0, 0, 8, 0, 0][0, 0, 8, 0, 0][0, 8, 0, 0][8, 0, 0][0, 0][0][]4 5 3 2 7 6 8 """

------------------------------------------------------END------------------------------------------------------

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。