二叉树_学习笔记

遍历二叉树:
  前序:
    基本原理:
      先遍历所有左边的结点,然后再遍历右边的结点
    基本写法:

void qianBian(T *er)
{
if(er==null)
return;
printf("结点:"+er->data);
qianBian(er->left);
qianBian(er->right);

}

  中序:
    基本写法:

void qianBian(T *er)
{
if(er==null)
return;
qianBian(er->left);
printf("结点:"+er->data);
qianBian(er->right);

}

  后序:
    基本写法:

void qianBian(T *er)
{
if(er==null)
return;
qianBian(er->left);
qianBian(er->right);
printf("结点:"+er->data);
}

树的遍历:
  1.先根遍历(先根后子)->相当于前序遍历
    ABEFCDG
  2.后根遍历(先子后根)->相当于中序遍历
    EFBCGDA
森林的遍历:
  1.前序遍历:(每棵树使用先根遍历)
    ABCDEFGHJI
  2.后序遍历:(每棵树使用后根遍历)
    BCDAFEJHIG
转换
  树转换成二叉树
    1.加线,在所有兄弟节点之间加一条线
    2.去线,对树中每个节点,只保留它与第一个孩子节点的连线
      删除它与其他孩子节点之间的连线
    3.层次调整,将树顺时针旋转一定的角度
  森林转为二叉树
    1.将每棵树转换成二叉树
    2.第一个二叉树的根节点不动,然后依次连接其他的根节点
    3.层次调整,将树顺时针旋转一定的角度
  二叉树转换为树
    1.加线,若某个节点的左孩子节点存在,则这个左孩子的n个
      右孩子节点都作为此节点的孩子,将该节点与这些右孩子
      节点用线连接起来
    2.去线,删除原二叉树中所有结点与其右孩子结点的连线
    3.层次调整
二叉树转换为森林
    1.从根节点开始,若右孩子存在,则把与右孩子结点的连线
      删除,再查看分离后的二叉树,若右孩子存在,则连线删除
      直到所有右孩子连线都删除为止,得到分离的二叉树
    2.再将每棵树分离后的二叉树转换为树即可

赫夫曼树:
  定义:
    带权路径长度WPL最小的二叉树称做赫夫曼树
  带权路径长度:
    为该节点到树根之间的路径长度与节点上权的乘积
构造赫夫曼二叉树:
    1.先把有权的叶子简单升序排序
    2.取头两个 最小权的节点做新结点的子节点,相对小的在左节点
    3.用新结点替换原来的
    4.重复步骤2,直到没有排序节点为止

时间: 2024-11-09 19:01:53

二叉树_学习笔记的相关文章

python基础教程_学习笔记23:图形用户界面

图形用户界面 丰富的平台 在编写Python GUI程序前,需要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合,可以通过叫做GUI工具包的给定Python模块进行访问. 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK

python基础教程_学习笔记3:元组

元组 元组不能修改:(可能你已经注意到了:字符串也不能修改.) 创建元组的语法很简单:如果用逗号分隔了一些值,那么你就自动创建了元组. >>> 1,3,'ab' (1, 3, 'ab') 元组也是(大部分时候是)通过圆括号括起来的. >>> (1,3,'13') (1, 3, '13') 空元组可以用没有内容的两个圆括号来表示. 如何实现包括一个值的元组呢? >>> (5) 5 >>> ('ab') 'ab' >>>

python基础教程_学习笔记9:抽象

抽象 懒惰即美德. 抽象和结构 抽象可以节省大量工作,实际上它的作用还要更大,它是使得计算机程序可以让人读懂的关键. 创建函数 函数可以调用(可能包含参数,也就是放在圆括号中的值),它执行某种行为并且返回一个值.一般来说,内建的callable函数可以用来判断函数是否可调用: >>> import math >>> y=1 >>> x=math.sqrt >>> callable(x) True >>> callab

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by

python基础教程_学习笔记6:字典

字典 映射(mapping),一种可通过名字引用值得数据结构. 字典是python中唯一内建的映射类型. 字典中的值没有特殊的顺序,但都存储在一个特定的键(key)里.键可以是数字.字符串甚至是元组. 字典的使用 某些情况下,字典比列表更加适用,比如: 表征游戏棋盘的状态,每个键都是由坐标值组成的元组: 存储文件修改数,用文件名作为键: 数字电话/地址簿: 假如有一个人名列表如下: >>>names=['Alice','Beth','Cecil','Dee-Dee','Earl'] 如果

python基础教程_学习笔记5:字符串

字符串 基本字符串操作 字符串也是序列,因此序列的基本操作(索引.分片.连接.乘法.长度.求最大值和最小值.成员资格)对字符串同样适用: 索引 >>> 'a_string'[0] 'a' 长度 >>> len('a_string') 8 求最大值 >>> max('a_string') 't' 求最小值 >>> min('a_string') '_' 乘法 >>> 'a_string'*2 'a_stringa_st

python基础教程_学习笔记26:好玩的编程

好玩的编程 程序设计的柔术 当大家坐下来并计划应该如何组织程序的时候,对于这个具体的程序,还没有任何的经验.在实现功能的时候,会逐渐地学到对原始设计有用的新知识.不应该无视一路走来所吸取的教训,而应该将它们用于软件的重新设计(或重构)中. 灵活性的实现包括许多方面,下面是其中两个: 原型设计:python最棒的功能之一就是可以快速地编写程序.编写原型程序是更充分地了解问题的一种很好的方法. 配置:灵活性有很多种存在形式.配置的目的就是让程序某部分的改变更简单,对于你和用户来说都是这样. 第三点是

python基础教程_学习笔记21:文件和素材

文件和素材 打开文件 open函数用来打开文件,语法如下: open([name[,mode[,buffering]]) open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象.模式(mode)和缓冲(buffering)参数都是可选的. >>> f=open(r'D:\software(x86)\Python27\README.txt') 如果文件不存在,则出现错误: >>> f=open(r'D:\software(x86)\Python27\READM

python基础教程_学习笔记15:标准库:一些最爱——fileinput

标准库:一些最爱 fileinput 重要的函数 函数 描述 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 lineno() 返回当前(累计)的名称 filelineno() 返回当前文件的行数 isfirstline() 检查当前行是否是文件的第一行 isstdin() 检查最后一行是否来自sys.stdin nextfile() 关闭当前文件,移动到下一个文件 close() 关闭序列 fileinput