python-实现二叉树
# encoding=utf-8 class Node(object):
def __init__(self, item):
self.item = item
self.lchild = None
self.rchild = None class BinaryTree(object):
def __init__(self, node=None):
self.root = node def add(self, item):
"""添加节点"""
if self.root is None:
self.root = Node(item)
else:
# 使用队列来处理使用广度优先查找要添加元素的位置
queue = []
queue.append(self.root)
while len(queue) > 0:
node = queue.pop(0)
if node.lchild is not None:
queue.append(node.lchild)
else:
node.lchild = Node(item)
return
if node.rchild is not None:
queue.append(node.rchild)
else:
node.rchild = Node(item)
return def breadth_travel(self):
"""广度优先遍历二叉树"""
if self.root is None:
return
else:
queue = []
queue.append(self.root)
while len(queue) > 0:
node = queue.pop(0)
print(node.item, end=" ")
if node.lchild:
queue.append(node.lchild)
if node.rchild:
queue.append(node.rchild) # ============================================
# 深度优先3种遍历二叉树方式 def preorder_travel(self, node):
"""先序遍历 即 根 左 右"""
if node:
print(node.item, end=" ")
self.preorder_travel(node.lchild)
self.preorder_travel(node.rchild)
else:
return def inorder_travel(self, node):
"""中序遍历 即 左 根 右"""
if node:
self.inorder_travel(node.lchild)
print(node.item, end=' ')
self.inorder_travel(node.rchild)
else:
return def postorder_travel(self, node):
"""后序遍历 即 左 右 根"""
if node:
self.postorder_travel(node.lchild)
self.postorder_travel(node.rchild)
print(node.item, end=' ')
else:
return if __name__ == '__main__':
t = BinaryTree()
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.add(9)
t.breadth_travel()
print("")
t.preorder_travel(t.root)
print("")
t.inorder_travel(t.root)
print("")
t.postorder_travel(t.root)
print("")
python-实现二叉树的更多相关文章
- 【DataStructure In Python】Python模拟二叉树
使用Python模拟二叉树的基本操作,感觉写起来很别扭.最近做编译的优化,觉得拓扑排序这种东西比较强多.近期刷ACM,发现STL不会用实在太伤了.决定花点儿时间学习一下STL.Boost其实也很强大. ...
- Python实现二叉树的四种遍历
对于一个没学过数据结构这门课程的编程菜鸟来说,自己能理解数据结构中的相关概念,但是自己动手通过Python,C++来实现它们却总感觉有些吃力.递归,指针,类这些知识点感觉自己应用的不够灵活,这是自己以 ...
- Python实现二叉树的左中右序遍历
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/3/18 12:31 # @Author : baoshan # @Site ...
- python实现二叉树
初学python,需要实现一个决策树,首先实践一下利用python实现一个二叉树数据结构.建树的时候做了处理,保证建立的二叉树是平衡二叉树. # -*- coding: utf-8 -*- from ...
- Python实现二叉树及其4种遍历
Python & BinaryTree 1. BinaryTree (二叉树) 二叉树是有限个元素的集合,该集合或者为空.或者有一个称为根节点(root)的元素及两个互不相交的.分别被称为左子 ...
- Python实现二叉树的前序、中序、后序、层次遍历
有关树的理论部分描述:<数据结构与算法>-4-树与二叉树: 下面代码均基于python实现,包含: 二叉树的前序.中序.后序遍历的递归算法和非递归算法: 层次遍历: 由前序序列.中 ...
- python实现二叉树遍历算法
说起二叉树的遍历,大学里讲的是递归算法,大多数人首先想到也是递归算法.但作为一个有理想有追求的程序员.也应该学学非递归算法实现二叉树遍历.二叉树的非递归算法需要用到辅助栈,算法着实巧妙,令人脑洞大开. ...
- Python数据结构——二叉树的实现
1. 二叉树 二叉树(binary tree)中的每个节点都不能有多于两个的儿子. 1.1 二叉树列表实现 如上图的二叉树可用列表表示: tree=['A', #root ['B', #左子树 ['D ...
- Python实现二叉树的前序遍历、中序遍历
计算根节点到叶子节点的所组成的数字(1247, 125, 1367)以及叶子节点到根节点组成的数字(7421, 521, 8631),其二叉树树型结构如下 计算从根节点到叶子节点组成的数字,本质上来说 ...
- python实现二叉树和它的七种遍历
介绍: 树是数据结构中很重要的一种,基本的用途是用来提高查找效率,对于要反复查找的情况效果更佳,如二叉排序树.FP-树. 另外能够用来提高编码效率,如哈弗曼树. 代码: 用python实现树的构造和几 ...
随机推荐
- CF1528D It's a bird! No, it's a plane! No, it's AaParsa!
个人思路: floyd 求最短路,\(\Theta(n^3)\) 不能维护边的变化. 然后就不会做了. 正解: 首先,对于每个起始点,到达一个点 \(v\) 越早越好,因为可以等待. 边的变化相当于每 ...
- iOS底层原理02-alloc源码分析
首先,从最熟悉的入手 - 对象,看看这三个对象的内容,内存地址和指针地址. LGPerson *p1 = [LGPerson alloc]; LGPerson *p2 = [p1 init]; ...
- MySQL8.0的下载、安装、配置
转1: MySQL8.0的下载.安装.配置 MySQL8安装教程(下载.安装.连接.卸载) Navicat Premium 15激活(含注册机)
- CCF 201803-4 棋局评估
一. 对抗搜索的适用范围 在博弈论题目中,如果决策双方的获胜条件是截然相反的,即一方要求得分越高越好,另一方要求得分越低越好,这时我们就可以用上对抗搜索算法. 二.对抗搜索的主要思想 对抗搜索的核心思 ...
- flutter 底部导航栏 BottomNavigationBar
话不多说,上代码 import 'package:flutter/material.dart'; import 'package:flutter_zhihu/pages/tabs/homeTab.da ...
- 解决vuex 状态管理mutations报错为:"[vuex] unknown mutation type: VIWE_NAV"
报错截图: 我的解决思路: 1.先检查gettes方向获取与actions提交是否畅通,同时专注检查code是否输错. 2.我查了别人多数是""在vuex中没有mutation,有 ...
- find_in_set使用:匹配按逗号分隔后的内容
SELECT * FROM `tb_test` WHERE c_id ='123' AND create_time LIKE '2021-06-03%' AND find_in_set('A362 ...
- CSS手册
3. CSS背景 1. 颜色 body {background-color:#b0c4de;} 十六进制 - 如:"#ff0000" RGB - 如:"rgb(255,0 ...
- PHP5-8各版本特性详解
汇总 PHP5.1: autoload PDO MySQLi 类型约束 PHP5.2: JSON 支持 PHP5.3: 命名空间 匿名函数 闭包 新增魔术方法__callStatic()和__invo ...
- 港湾云服务器 香港新世界 节点 centos7.7 64 部署java项目
开通云服务器 使用Xshell远程登录 XFTP连接服务器查看文件(这个步骤可有可无) yum安装jdk 在linux上使用yum安装是非常粗暴无脑的,但仍然有需要注意的点,不然会掉坑里.这里说一下步 ...