博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树结构
阅读量:4326 次
发布时间:2019-06-06

本文共 1311 字,大约阅读时间需要 4 分钟。

一、 树

1. 树的定义

  树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素;它是n(n>=0)个结点的有限集合,当n=0时称为空树。在任意飞空树中有且仅有一个称为根的结点;

  树的基本概念

  a. 双亲、孩子和兄弟。结点的子树的根称为该结点的孩子,该结点称为其子结点的双亲(parent)。具有相同双亲的结点互为兄弟。

  b. 结点的度。一个结点的子树的个数即为该结点的度。度数最大的结点的度称为树的度。

  c. 叶子节点。度为0的节点,也称终端结点。

  d. 内部结点。度不为0的节点(包括根节点),也称分支结点或非终端结点。除根节点以外,分值结点也称为内部结点。

  e. 结点的层次。根为第一层,根的孩子为第二层,依此类推。

  f. 树的高度。一棵树的最大层数记为树的高度(或深度)。

  g. 有序(无序)树。若将树中结点的各子树看成是从左到右具有次序的,即不能交换,则称为改树为有序树,否则称为无序树。

树的遍历:

前序遍历:125673489(10)  后序遍历:567239(10)841  层次排列:123456789(10)前序遍历:125673489(10)

后序遍历:567239(10)841

层次排列:123456789(10)

 

2. 二叉树的定义

  二叉树是n(n>=0)个结点的有限集合,它或者是空树(n=0),或者是由一个根节点及两棵不相交的且分别称为左、右子树的二叉树所组成。

二叉树和树是两个完全不同的概念,二叉树并不是特殊的树,树和二叉树的区别如下:

  a. 二叉树中结点的子树要区分左子树和右子树,即使在结点只有一颗子树的情况下,也要明确指出该子树是左子树还是右子树。

  b. 二叉树结点最大度为2,而树中不限制结点的度数。

  

  二叉树的性质:

  a. 二叉树第i层(i>=1)上最多有2i-1个结点。

  b. 高度为k的二叉树最多有2k-1个结点(k>=1)。

  c. 对于任何一颗二叉树,若其终端节点数为n0,度为2的结点数为n2,则n0=n2+1。

  d. 具有n个结点的完全二叉树的深度为⌊log2n⌋+1(“⌊⌋”表示向下取整)

  e. 对一棵有n个结点的完全二叉树的所有结点按层次自上而下、自左至右进行编号,则对于在任一结点i(1<=i<=n)有:

    ① 若i=1,则结点i是二叉树的根,无双亲;若i>1,则其双亲为⌊i/2⌋。

    ② 若2i>n,则结点i没有左孩子,否则其左孩子为2i。

    ③ 若2i+1>n,则结点i没有右孩子,否则其右孩子为2i+1。

  满二叉树、完全二叉树、非完全二叉树:

 

 二叉树的遍历:

 

前序遍历:12457236        

中序遍历:42785136

后序遍历:48752631

层次遍历:12345678

  所谓的前、中、后指的是根节点的访问顺序。中序遍历中根节点左边的都是它的左子树结点,右边都是右子树结点;同样,将2看做左子树的根节点的时候,2左边的都是它的左子树结点,右边的也都是它的右子树结点,依此类推。

3. 二叉树和树的转换

  请移步:

转载于:https://www.cnblogs.com/ImaY/p/4276498.html

你可能感兴趣的文章
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>
P1313 计算系数
查看>>
NSString的长度比较方法(一)
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
java基础 第十一章(多态、抽象类、接口、包装类、String)
查看>>
Hadoop 服务器配置的副本数量 管不了客户端
查看>>