树和二叉树
Posted webcyh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树和二叉树相关的知识,希望对你有一定的参考价值。
---恢复内容开始---
树的逻辑结构表示有树形结构文氏图结构和凹入表示法和括号表示法
基本术语
结点的度:最大度
树的度:结点总度:
分支结点:有后继结点的结点
叶子结点:没有后继结点的结点
孩子结点:一个结点的后继结点
双亲结点:一个结点的前驱结点
子孙结点:一个结点的子树当中除去本身的结点
祖先结点:从树根结点到达某个结点经过的所有结点,不包括本身
兄弟结点:
结点层次:根节点为第一层
树的高:最大层次
森林:有零个或者多个不交错的树
性质:
树中的结点数=树的度+1
度为m的元素 第i层最多有m^(i-1)个结点 (满树的时候根节点有m度 第i-1有m^(i-1)度该度也就是第i层的结点数)
m次树也就是最大度为m 但n个结点构造树 但为m次树或者接近满m次树的时候 树的高度层数最小
/* 高度为h的m次树最多有多少个结点? m+m^2+m^3+...+m^(h-1)总度数 再加上跟结点1 就是m的h-1次阶层 也就是m^0+m^1+m^2+m^3+...+m^(h-1) */
因为树的结构为非线性结构因此树的运算较以前讨论的线性结构复杂
主要运算有:
寻找满足某种特定关系的结点 如寻找当前结点的双亲结点等等
插入或者删除某个结点 如在当前的结点上插入一个新的结点或者删除当前结点的第i个孩子结点等
遍历树中的每个结点 主要有先根遍历、后根遍历和层次遍历三种 前两者需要用到递归知识
存储一棵树不仅仅要存储树中的结点的值还要存储结点与结点之间的关系
双亲存储结构(使用数组存储)
每个结点包含当前结点值还有双亲结点在该数组当中的下标,但parent下标为-1时该节点为树的根结点
特点:寻找双亲结点容易找孩子结点难
孩子链存储结构
使用链表该链表的每个结点用于保存当前值以及指针指向所有孩子结点 由于孩子个数是未知的因此相当耗内存
特点:寻找孩子简单 但找双亲难
兄弟链存储结构:
每个结点有一个data保存值 一个left 指向第一个孩子结点 right指针指向兄弟结点
特点:跟孩子链存储结构相似,不过是二叉树因此节省内存空间
二叉树与树都属于树形结构但不能将二叉树定义为树的特殊情况
二叉树新性质
编号
满二叉树
完全二叉树:除最后一层,其余都是满的,任何一个结点的右子树高度为h则左子树的高度为h或者h+1
在有n个结点的二叉树中:
但第i个结点满足2*i<=n则i为分支结点
分支结点i的左孩子为2*i
右孩子为2*i+1
其双亲结点i/2向下取整
二叉树的存储结构:
数组存储
数组下表表示为结点的编号 空结点存储#字符
链式存储
未完后续。。。
以上是关于树和二叉树的主要内容,如果未能解决你的问题,请参考以下文章