前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|实现二叉树

Python|实现二叉树

作者头像
算法与编程之美
发布2020-03-31 16:24:05
5900
发布2020-03-31 16:24:05
举报

问题描述

在树的种类中,有这样一类树,它每个节点下面有两个新的左右节点(一般称为该节点的左右子树),且每个节点的子树有左右之分不能颠倒,这样的树叫做二叉树。接下来就用python来实现二叉树。

解决方案

首先要找准二叉树的结构特点:由根节点引出以下的左右的两个子节点,然后再由子节点引出相应的子节点,且每一个节点的子树之分不能颠倒。

第一步:

创建一个节点类,其中包含左右两个子树与节点的值:

class Node(object): def __init__(self,item): self.elem=item #创建节点值 self.left=None #创建左子树 self.right=None #创建右子树

第二步:

创建一个二叉树类,创建一个根节点:

class Tree(object): def __init__(self):#root定义的根节点 self.root=None

在二叉树类中定义一个增加的方法,这里利用的队列来进行二叉树的添加,具体操作是:先把节点放入队列中,然后取出节点,再判断是否有左右子树,没有左右子树就添加左右子树;再取出节点再判断,再增加:

def add(self,item): node=Node(item)#将Node类实例化参数node if self.root is None: self.root=node return queue=[self.root]#创建一个队列,将根节点放入队列中 while queue: cur_node=queue.pop(0)#向队列queue中取出第一个节点进行判断 if cur_node.left is None: cur_node.left=node return else: queue.append(cur_node.left) if cur_node.right is None: cur_node.right=node return else: queue.append(cur_node.right)

第三步:

定义一个广度遍历的方法来判断添加的节点是否正确。

def breadth(self): if self.root is None: #首先判断根节点是否为空,为空则返回 return queue=[self.root]#将根节点放入队列中 while queue: cur_node = queue.pop(0)#取出节点 print(cur_node.elem,end=' ')#打印节点值,也是广度遍历的值 if cur_node.left is not None:#判断左子树 queue.append(cur_node.left) if cur_node.right is not None:#判断右子树 queue.append(cur_node.right)

第四步

创建完毕,来试试效果吧!

if __name__ == "__main__": t=Tree()#实例化二叉树类,调用add方法,向二叉树中添加元素 t.add(0) t.add(1) t.add(2) t.add(3) t.add(4) t.add(5) t.add(6) t.add(7) t.add(8) t.breadth()#调用breadth方法,打印二叉树# 输出结果:#0 1 2 3 4 5 6 7 8

结语

本文主要介绍了如何用python来实现二叉树的操作,主要利用了队列元素的取出,判断,增添来实现。以后将会继续介绍用python实现二叉树的几种遍历方法,敬请期待。

END

编 辑 | 王楠岚

责 编 | 王卓越

where2go 团队


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档