python二叉树去重_python二叉树学习分享

介绍:树形结构是应用相当广泛的一种非线性结构,建立与应用大多使用链表来处理,当然也可用连续的列表来实现

常见概念:

满二叉树:如果树高位H,树的结点总数为2*H-1,H>=0,称为满二叉树

完全二叉树:高度为H,节点数小于2*H-1,但节点的编号方式与满二叉树一致

斜二叉树:当一个二叉树完全没有左节点或者右节点的时候,称为左斜二叉树或者右斜二叉树

严格二叉树:每一个非终端的节点均有非空的左右子树

1.用数组实现二叉树

规则:左子树的节点索引值是父节点索引值乘2

右子树的节点索引值是父节点索引值乘2加1

每一个树根的值大于左子树值小于友子树值

创建函数:

defBetree(betree,data,length):for i in range(1,length):

level= 1

while betree[level] !=0:if betree[level] >data[i]:

level= level*2

else:

level= level*2+1betree[level]=data[i]return betree

2.链表实现二叉树

有点:节点的增加和删除容易实现,缺点:很难找到父节点

classtree:def __init__(self):

self.data=0

self.left=None

self.right=None

def creat_tree(root,val):

newnode=tree()

newnode.data=val

newnode.left=None

newnode.right=None

if root==None:

root=newnode

return root

else:

current=root

while current != None:

backup = current

if current.data > val:

current=current.left

else:

current=current.right

if backup.data > val:

backup.left = newnode

else:

backup.right = newnode

3.二叉树遍历

三种遍历方法:

#中序遍历

definorder(ptr):if ptr !=None:

inorder(ptr.left)print("%4d"%ptr.data,end="")

inorder(ptr.right)print()#后序遍历

defpostorder(ptr):if ptr !=None:

postorder(ptr.left)

postorder(ptr.right)print("%4d"%ptr.data,end="")print()#前序遍历

defpreorder(ptr):if ptr !=None:print("%4d"%ptr.data,end="")

preorder(ptr.left)

preorder(ptr.right)

4.二叉树节点查找

原则:从树根出发进行比较,如果小于树根,左子树查找,大于树根,右子树查找,找到要查找的值

defsearch(ptr,val):whileTrue:if ptr ==None:returnNoneif ptr.data ==val:returnptrelse:if ptr.data >val:

ptr=ptr.leftelse:

ptr= ptr.right

5.二叉树节点的删除

a.删除的节点位叶子,只需将与其相连的父节点指向None

b.删除节点只有一棵子树,将其子树移到该节点的父节点指向

c.删除节点有左右两个子树,将左右子树中值较大的子树移到该结点处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值