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.设计集合框架,使用泛型实现各类. ...
随机推荐
- 什么是静态内部(Static Inner)类,语法要注意什么?
4静态内部类(Static Inner Classes) 马克-to-win:这里的内部类的static,意思是它可以不用实例化外部类,就自己单独被实例化,单独存在(有点像生活中的办公室和办公桌(独立 ...
- java基础-字符流
字符流 * 字符流是可以直接读写字符的IO流 * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出. FileReader * FileRea ...
- [ Skill ] map mapc mapcan mapcar mapcon maplist mapinto
https://www.cnblogs.com/yeungchie/ 几种 map 函数的差异 map map( lambda(( a b ) println( list( a b )) ) list ...
- 帝国CMS怎样删除清空数据库记录?
我用的帝国CMS,删除已经发表的文章和栏目后,后面新发的栏目和文章ID并不会重新从1开始,而是接着已经删除的文章和栏目ID,那么,怎样让后面发的文章和栏目ID重新从1开始呢? 首先,做任何重要修改前先 ...
- uniapp-h5之canvans上文本的展示
ctx.font = 'bold 14px arial';ctx.fillStyle = '#e9e6e6';ctx.fillText('长按图片保存到相册', (this.pwidth -250/e ...
- 使用Kubeadm搭建高可用Kubernetes集群
1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...
- 软件工程web课程第一次实验作业
开头总结 本次作业使用html+css+js实现了一个简单页面 最终我要记录的是使用js完成了轮播图中图片背景的转换 <script> window.onload = function ( ...
- Java SE 01
强类型语言 要求变量的使用要严格符合规定,所有变量都必须先定义后使用 Java的数据类型分为两大类 基本类型(promitive type) 数值类型 ① 整数类型 byte 占1个字节范围:-128 ...
- XCTF练习题---WEB---backup
XCTF练习题---WEB---backup flag:Cyberpeace{855A1C4B3401294CB6604CCC98BDE334} 解题步骤: 1.观察题目,打开场景 2.打开以后发现是 ...
- Java 18 新特性:使用Java代码启动jwebserver
前几天分享了Java 18 新特性:简单Web服务器的jwebserver命令行功能. 今天换一种方式,使用Java代码来实现一个静态资源服务器. 详细步骤我录了个视频放到B站了,感兴趣的小伙伴可以点 ...