当前位置: 首页 > news >正文

二叉树的应用

目录

一、二叉树遍历算法的应用

二、树的存储结构

1、双亲表示法

2、孩子表示法

带双亲的孩子链表

3、孩子兄弟表示法(左孩子、右兄弟)较为普遍

三、森林与二叉树的转换

四、哈夫曼树

哈夫曼(Huffman)树的构造


一、二叉树遍历算法的应用

二叉树遍历算法的应用

计算二叉树深度(或高度)

如果是空树,则深度为0; 否则,递归计算左子树的深度记为m,递归计算右子树的深度记为n,二叉树的深度则为m与n的较大者加1。

def deep(self,node):
        # 如果空树,表示树的深度为0
        if node == None:
            return 0
        # 否则,遍历树的左子树和右子树
        else:
            leftdeep = self.deep(node.left)
            rightdeep = self.deep(node.right)
            # 获得左右子树中深度最大的树的深度
            maxdeep = max(leftdeep,rightdeep)
            # 加上根节点的层次,因此为maxdeep+1
            return maxdeep+1

计算二叉树节点总数

如果是空树,则节点个数为0; 否则,节点个数为左子树的节点个数+右子树的节点个数再+1。

def countNode(self,node):
        if node == None:
            return 0
        else:
            leftCount = self.countNode(node.left)
            rightCount = self.countNode(node.right)
            sumCount = leftCount+rightCount+1
            return sumCount

二、树的存储结构

1、双亲表示法

2、孩子表示法

由于树中结点有多棵子树,故可采用多重链表,每个结点有多个指针域,每个指针指向一棵子树的根结点。

将每个结点的孩子结点排列起来,视为一个线性表,且以单链表作为存储结构,n个结点具有n个孩子链表,n个头指针又组成一个线性表,采用顺序存储结构存储。 

带双亲的孩子链表

3、孩子兄弟表示法(左孩子、右兄弟)较为普遍

二叉链表表示法:结点的两个链域分别指向该结点的第一个孩子、下一个兄弟。

三、森林与二叉树的转换

将F={T1, T2,⋯,Tn} 中的每棵树转换成二叉树。

将森林中的第二棵树的根结点看成第一棵树根节点的兄弟,依此类推,第三棵树的根结点看成第二棵树根节点的兄弟

四、哈夫曼树

哈夫曼树又称最优二叉树,是一类带权路径长度最短的树

哈夫曼(Huffman)树的构造

路径:由一节点到另一节点间的分支所构成

路径的长度:路径上的分支数目

带权路径长度:节点到根的路径长度与节点上权值的乘积

树的带权路径长度WPL:树中所有叶子节点的带权路径长度之和

哈夫曼树:带权路径长度最小的树

权值越大的节点越靠近根节点-----WPL越小

相关文章:

  • Dubbo、HTTP、RMI之间的区别
  • 递归?递推?
  • Asp.NET Core WebApi 创建带鉴权机制的Api
  • 蓝桥杯 — — 接龙数列
  • swift菜鸟教程14(闭包)
  • Java 解压 rar 文件
  • CSS属性书写顺序
  • wireshark过滤器表达式的规则
  • linux 定时器管理系统设计与实现
  • MySql主从相关概念
  • windows虚拟内存
  • 全局异常处理器的基本使用
  • JS-防抖与节流
  • 【STM32】解读启动文件startup_stm32f10x_md.s
  • Vue 大文件分片上传组件实现解析
  • 互联网三高-高性能之无锁编程
  • [蓝桥杯 2023 省 A] 平方差
  • CSS高度坍塌?如何解决?
  • 达梦数据库-学习-16-常用SQL记录(持续更新)
  • 【家政平台开发(36)】数据迁移与初始化开发:筑牢家政平台的数据根基
  • 做逆战网站的名字/创建个人网站的流程
  • .net网站开发的例子/营销公司
  • wordpress 裁剪/灯塔网站seo
  • 焦作电子商务网站建设实例/安卓优化大师下载安装到手机
  • 外贸seo建站/百度推广代理公司哪家好
  • html5网站建设微信运营公司织梦模板/搜索引擎在线