bintree
Python实现二叉树的建立与遍历
创建(二叉)树节点类
class Node:
def __init__(self,data,l=None,r=None):
self.val = data
self.left = l
self.right = r
创建(二叉)树
class Tree:
def __init__(self):
self.root = None
def add_node(self,item):
node = Node(item)#实例化节点
if self.root is None:
self.root = node
return
queue = [self.root]#队列存放的是待操作节点一个个Node object
while queue:
cur_node = queue.pop(0)#取出队头作为当前操作节点
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 遍历函数...(如下)
(二叉)树的遍历
(1). 广度遍历(Breadth traversal)即层次遍历(Sequence traversal)
def Breadth_travel(self):
if self.root == None:
return
queue =[self.root]
while queue:
cur_node = queue.pop(0)
print(cur_node.val,end=' ')
if cur_node.left:
queue.append(cur_node.left)
if cur_node.right:
queue.append(cur_node.right)
(2). 深度遍历(Depth traversal)
先序遍历(preorder traversal)
def preorder(self,node):
if node is None:
return
print(node.val,end=' ')
self.preorder(node.left)
self.preorder(node.right)
中序遍历(inorder traversal)
def inorder(self,node):
if node is None:
return
self.inorder(node.left)
print(node.val,end=' ')
self.inorder(node.right)
后序遍历(postorder traserval)
def postorder(self,node):
if node is None:
return
self.inorder(node.left)
self.inorder(node.right)
print(node.val,end=' ')
应用实例:[判断对称二叉树]
说明:给定一个二叉树,检查他是否是镜像对称的。
example:
源代码:(将下列源码加入到Tree类)
def isSymmetric(self, node) -> bool:
if node is None:
return True
def dfs(left,right):
if left ==None and right ==None:#判空操作
return 1
if not (left and right):#如两边有一个为空(第一个if已经判断了同时为空)
return 0
if left.val!=right.val:#两边不为空,则判断两边的值
return 0
return dfs(left.left,right.right) and dfs(left.right,right.left)
# 用递归函数,比较左节点,右节点
return dfs(self.root.left,self.root.right)
主程序:
if __name__ == '__main__':
tree = Tree()
data = [1, 2, 2, 3, 4, 4, 3]
for i in data:
tree.add_node(i)
#tree.preorder(tree.root)
#tree.inorder(tree.root)
#tree.postorder(tree.root)
tree.Breadth_travel()
print()
print(tree.isSymmetric(tree.root))
bintree的更多相关文章
- 二叉树BinTree类定义
#include<iostream> using namespace std; template<class T> struct BinTreeNode{//二叉树结点类 T ...
- 03-树1 树的同构 (C语言链表实现)
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h& ...
- 二叉树的层序遍历 BFS
二叉树的层序遍历,或者说是宽度优先便利,是经常考察的内容. 问题一:层序遍历二叉树并输出,直接输出结果即可,输出格式为一行. #include <iostream> #include &l ...
- 【算法与数据结构】二叉搜索树的Java实现
为了更加深入了解二叉搜索树,博主自己用Java写了个二叉搜索树,有兴趣的同学可以一起探讨探讨. 首先,二叉搜索树是啥?它有什么用呢? 二叉搜索树, 也称二叉排序树,它的每个节点的数据结构为1个父节点指 ...
- 【面经】用递归方法对二叉树进行层次遍历 && 二叉树深度
void PrintNodeAtLevel(BiTree T,int level) { // 空树或层级不合理 ) return; == level) { cout << T->da ...
- python数据结构与算法——二叉树结构与遍历方法
先序遍历,中序遍历,后序遍历 ,区别在于三条核心语句的位置 层序遍历 采用队列的遍历操作第一次访问根,在访问根的左孩子,接着访问根的有孩子,然后下一层 自左向右一一访问同层的结点 # 先序遍历 # ...
- c语言二叉树基本操作
编译器为vs2013 #include "stdafx.h" #include<malloc.h> #include<stdlib.h> #define O ...
- UVa 二叉树重建(先序+中序求后序)
题意是给出先序和中序,求出后序. 先序遍历先访问根结点,通过根结点可以在中序中把序列分为左子树部分和右子树部分,我建了一个栈,因为后序遍历最后访问根结点,所以把每次访问的根结点放入栈中.因为后序遍历先 ...
- java项目——数据结构实验报告
java项目——数据结构总结报告 20135315 宋宸宁 实验要求 1.用java语言实现数据结构中的线性表.哈希表.树.图.队列.堆栈.排序查找算法的类. 2.设计集合框架,使用泛型实现各类. ...
随机推荐
- Java Web项目与Java项目的区别
一.以下是我对Java Web项目和Java项目这两者的理解以及区别: 1.Java Web项目是基于Java EE类的:而Java项目是基于Java应用程序的. 2.Java Web项目是网页的编码 ...
- Python入门-内置对象函数
1.callable() 查看函数知否可调用,可调用返回True,不可用返回False print("input函数:", callable(input)) #input函数: T ...
- MySQL---什么是事务
什么是事务 一个数据库事务通常包含对数据库进行读或写的一个操作序列.它的存在包含有以下两个目的: 为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方 ...
- SSM实现个人博客-day04
项目源码免费下载:SSM实现个人博客 有问题询问vx:kht808 3.项目搭建(SSM整合) (1)创建maven工程,导入相应的依赖 <properties> <project. ...
- SpringBoot其他框架-JPA-Hibernate-Swagger
SpringBoot其他框架 通过了解其他的SpringBoot框架,我们就可以在我们自己的Web服务器上实现更多更高级的功能. 邮件发送:Mail 我们在注册很多的网站时,都会遇到邮件或是手机号验证 ...
- os、sys、json、subprocess模块
今日内容概要 1.os模块 2.sys模块 3.json模块 4.subprocess模块 今日内容详细 os模块 """该模块主要是跟操作系统打交道"&quo ...
- 华为组播实验,PIM-DM组播实验
一.配置VLAN,并将端口加入VLAN LSW5: system vlan batch 10 to 100 int g 0/0/1 port link-type trunk port trunk al ...
- Kotlin 之 let、with、run、apply、also 函数的使用
一.内联拓展函数 let let 扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择:let函数另一个作用就是可以避免写一些判断null的操 ...
- 踹掉后端,前端导出Excel!
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一个下载链接,但有时候我们只想导出前端页面上已经有了的数据,不想再调后端导出接口浪费服务器资源,学习本文demo例子,我们踹掉后端,直接在前 ...
- 简单几步解决ie打不开闪退的问题 亲测有效
起因: 银行U盾插入 IE自动打开银行门户网站 打不开 闪退 不插入之后 IE还是闪退, 修复之法 清除IE扩展 一些自己安装的扩展或是被恶意安装的扩展插件会导致IE无法启动 1. 按住windows ...