Python实现二叉树的建立与遍历

  1. 创建(二叉)树节点类

    class Node:
    def __init__(self,data,l=None,r=None):
    self.val = data
    self.left = l
    self.right = r
  2. 创建(二叉)树

    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 遍历函数...(如下)
  3. (二叉)树的遍历

    (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=' ')
  4. 应用实例:[判断对称二叉树]

    说明:给定一个二叉树,检查他是否是镜像对称的。

    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的更多相关文章

  1. 二叉树BinTree类定义

    #include<iostream> using namespace std; template<class T> struct BinTreeNode{//二叉树结点类 T ...

  2. 03-树1 树的同构 (C语言链表实现)

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h& ...

  3. 二叉树的层序遍历 BFS

    二叉树的层序遍历,或者说是宽度优先便利,是经常考察的内容. 问题一:层序遍历二叉树并输出,直接输出结果即可,输出格式为一行. #include <iostream> #include &l ...

  4. 【算法与数据结构】二叉搜索树的Java实现

    为了更加深入了解二叉搜索树,博主自己用Java写了个二叉搜索树,有兴趣的同学可以一起探讨探讨. 首先,二叉搜索树是啥?它有什么用呢? 二叉搜索树, 也称二叉排序树,它的每个节点的数据结构为1个父节点指 ...

  5. 【面经】用递归方法对二叉树进行层次遍历 && 二叉树深度

    void PrintNodeAtLevel(BiTree T,int level) { // 空树或层级不合理 ) return; == level) { cout << T->da ...

  6. python数据结构与算法——二叉树结构与遍历方法

    先序遍历,中序遍历,后序遍历 ,区别在于三条核心语句的位置 层序遍历  采用队列的遍历操作第一次访问根,在访问根的左孩子,接着访问根的有孩子,然后下一层 自左向右一一访问同层的结点 # 先序遍历 # ...

  7. c语言二叉树基本操作

    编译器为vs2013 #include "stdafx.h" #include<malloc.h> #include<stdlib.h> #define O ...

  8. UVa 二叉树重建(先序+中序求后序)

    题意是给出先序和中序,求出后序. 先序遍历先访问根结点,通过根结点可以在中序中把序列分为左子树部分和右子树部分,我建了一个栈,因为后序遍历最后访问根结点,所以把每次访问的根结点放入栈中.因为后序遍历先 ...

  9. java项目——数据结构实验报告

    java项目——数据结构总结报告 20135315  宋宸宁 实验要求 1.用java语言实现数据结构中的线性表.哈希表.树.图.队列.堆栈.排序查找算法的类. 2.设计集合框架,使用泛型实现各类. ...

随机推荐

  1. java中什么是局部内部类Local inner class?

    5.局部内部类Local inner class 马克-to-win:什么叫局部内部类?内部类声明位置:1.它的外部类的范围之内.2.在几个程序块的范围之内.例如,由方法定义的块中或甚至在for循环体 ...

  2. 小程序colorui框架引入与使用

    colorui是UI框架:   超好用的一款 小程序二维码体验: :  引入方式: 1.先去下载colorui     https://github.com/weilanwl/ColorUI 把col ...

  3. Blazor组件自做七 : 使用JS隔离制作定位/持续定位组件

    1. 运行截图 演示地址 2. 在文件夹wwwroot/lib,添加geolocation子文件夹,添加geolocation.js文件 本组件主要是调用浏览器两个API实现基于浏览器的定位功能,现代 ...

  4. 基于Spring接口,集成Caffeine+Redis两级缓存

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 在上一篇文章Redis+Caffeine两级缓存,让访问速度纵享丝滑中,我们介绍了3种整合Caffeine和Redis作为两级缓存使用的方法,虽 ...

  5. python---100以内所有素数

    def get_primes(): """ 100以内的所有素数:每个数都对从2到其本身前一个数做整除, 遇到能整除就换下一个数. 如果从2到去本身前一个数都没有整除,则 ...

  6. Ubu18.0-NVIDIA显卡驱动重装

    //图片仅供参考,请勿代入 问题情况:电脑装了双系统,WIN10+Ubu,Ubu分辨率不稳定,经常发生变化 显卡型号:打开设备管理器进行查看 解决方法:重装NVIDIA显卡驱动 1.去英伟达官网下载自 ...

  7. BUCK电路和BL8033使用记录

    我开始时用的是MPS的MP1584EN,这个芯片各方面都挺不错的.有次老大让我画个降压电路,看到用的是MP1584就说国外的芯片太贵,让我用上海贝岭的BL8033.BL8033确实很好用,虽然它没有1 ...

  8. SpringCloud分布式尝试记录

    服务提供端: 客户消费端:

  9. Caused by: com.sonatype.nexus.staging.client.StagingRuleFailuresException: Staging rules failure! 已解决!

    问题分析 由于项目中修改了一些代码,然后没有修改版本号,直接deploy代码到仓库,最终导致错误! 根据 https://central.sonatype.org/faq/can-i-change-a ...

  10. 基于全志A40i开发板——Linux-RT内核应用开发教程(1)

    目录 1 Linux-RT内核简介 3 2 Linux系统实时性测试 3 3 rt_gpio_ctrl案例 10 4 rt_input案例 15 本文为Linux-RT内核应用开发教程的第一章节--L ...