zoukankan      html  css  js  c++  java
  • Python算法系列—深度优先遍历算法【二叉树】

    在这里插入图片描述
    这不就是二叉树吗?嗯,风景都在提示我该学学二叉树了

    一、什么是深度优先遍历

    深度优先遍历算法是经典的图论算法。从某个节点v出发开始进行搜索。不断搜索直到该节点所有的边都被遍历完,当节点v所有的边都被遍历完以后,深度优先遍历算法则需要回溯到v以前驱节点来继续搜索这个节点。
    注意:深度优先遍历问题一定要按照规则尝试所有的可能才行。

    二、二叉树

    1. 二叉树简介

    二叉树是一种特殊的数据结构,常见的数据结构包含数组,链表,图、队列、散列表和树。二叉树属于树结构,二叉树中的每一个节点都有两个分支称为左子树和于右子树。二叉树每一层最多有(2n1)(2^n - 1)个节点。和普通树不同,普通树的节点没有分支限制,并且普通树的节点没有左右、子树之分。

    2.二叉树类型

    二叉树类型:空二叉树、满二叉树、完全二叉树、完美二叉树、平衡二叉树。

    • 空二叉树:有零个节点
    • 完美二叉树:每一层节点都是满的二叉树(如1中举例的图)
    • 满二叉树:每一个节点都有零个或者两个子节点
    • 完全二叉树:出最后一层外,每一层节点都是满的,并且最后一层节点全部从左排列
    • 平衡二叉树:每个节点的两个子树的深度相差不超过1.
      在这里插入图片描述
      在这里插入图片描述
      :国内对完美二叉树和满二叉树定义相同
    3.二叉树相关术语
    术语 解释
    节点的度为节点的子树个数
    叶子节点 度为零的节点
    分支节点 度不为零的节点
    孩子节点 节点下的两个子节点
    双亲节点 节点上一层的源节点
    兄弟节点 拥有同一双亲节点的节点
    二叉树的源头节点
    深度 二叉树中节点的层的数量
    4. 二叉树的节点代码

    因为每个·节点都有两个子节点相连接,所以我们只需要拥有根节点就能找到二叉树上的任意节点,每个节点定义都相同

    class Node : #二叉树节点定义
    	def  _init_(self,x):
    		self.val = x #节点值
    		self.left = None #左侧子节点
    		self.right = None #右侧子节点
    
    
    5. 二叉树遍历顺序

    二叉树三种遍历形式:

    • DLR(先序):
    • LDR(中序):
    • LRD(后序):
      注意:L代表左子树R代表右子树;D代表根
      在这里插入图片描述
    6.深度优先遍历和广度优先遍历
    • 深度优先遍历:前序、中序和后序都是深度优先遍历
      从根节点出发直奔最远节点,
    • 广度优先遍历:首先访问举例根节点最近的节点,按层次递进,以广度优先遍历上图的顺序为:1-2-3-4-5-6-7

    三、面试题+励志

    企鹅运维面试题
    1.二叉树遍历顺序:看上文
    2.用你熟悉的语言说说怎么创建二叉树? python看上文
    努力学习追赶超越

  • 相关阅读:
    基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果(转)
    javascript中call、apply、argument、callee、caller
    Google Analytics10条有用教程(转)
    小问题
    MySQL exists的用法介绍
    warning C4005: “AF_IPX”: 宏重定义的解决办法
    /MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
    _mkdir
    文件读写操作总结
    Distinct
  • 原文地址:https://www.cnblogs.com/tianyao2020/p/12755217.html
Copyright © 2011-2022 走看看