面试--数据结构(5)(树)
来源:互联网 发布:js中push 编辑:程序博客网 时间:2024/06/06 10:53
树(Tree)是n(n≥0)个结点的有限集。在任意一棵非空树中:(1)有且仅有一个特定的被称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。
结点拥有的子树数称为结点的度(Degree)。度为0的结点称为叶子(Leaf)或终端结点。度不为0的结点称为非终端结点或分支结点。
树的度是树内各结点的度的最大值。
结点的子树的根称为该结点的孩子(Child),相应地,该结点称为孩子的双亲(Parent)。
结点的层次(Level)是从根结点开始计算起,根为第一层,根的孩子为第二层,依次类推。树中结点的最大层次称为树的深度(Depth)或高度。
如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。
1、二叉树
二叉树(Binary Tree)的特点是每个结点至多具有两棵子树(即在二叉树中不存在度大于2的结点),并且子树之间有左右之分。
二叉树的性质:
(1)、在二叉树的第i层上至多有2i-1个结点(i≥1)。
(2)、深度为k的二叉树至多有2k-1个结点(k≥1)。
(3)、对任何一棵二叉树,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。
一棵深度为k且有2k-1个结点的二叉树称为满二叉树。
可以对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,自左至右,则由此可引出完全二叉树的定义。深度为k且有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应时,称之为完全二叉树。
(4)、具有n个结点的完全二叉树的深度为不大于log2n的最大整数加1。
(5)、如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到最后一层,每层从左到右),则对任一结点i(1≤i≤n),有
a、如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点x(其中x是不大于i/2的最大整数)。
b、如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i。
c、如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1。
二叉树的链式存储:
链式二叉树中的每个结点至少需要包含三个域,数据域和左、右指针域。
二叉树的遍历:
假如以L、D、R分别表示遍历左子树、访问根结点和遍历右子树,则可有DLR、DRL、LRD、LDR、RLD、RDL这六种遍历二叉树的方案。若限定先左后右,则只有三种方案,分别称之为先(根)序遍历、中(根)序遍历和后(根)序遍历,它们以访问根结点的次序来区分
- 面试--数据结构(5)(树)
- 数据结构(面试)
- 数据结构面试大全(3)
- 数据结构笔试、面试(一)
- 数据结构常见面试(1)
- 数据结构面试整理(1)
- 数据结构面试整理(2)
- 数据结构面试整理(3)
- 数据结构面试整理(4)
- 面试---数据结构基础 (1)
- 数据结构学习之二叉树(面试易考题整理)
- 面试---数据结构(2)(数组)
- 面试---数据结构(3)(链表)
- 数据结构与算法等(笔试、面试)
- 常见数据结构面试题目(一)
- 常见数据结构面试题目(二)
- 常见数据结构面试题目(三)
- 常见数据结构面试题目(四)
- python sort() sorted()
- SpringCloud微服务系列(2): 创建一个基于Springboot的RESTFul服务
- PAT 1013. Battle Over Cities (25)
- 向量算子(梯度、散度、旋度)与拉普拉斯算符的公式与定义整理
- ZOJ2042
- 面试--数据结构(5)(树)
- 面试题:插入排序
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
- 经典Aop
- Java抽象类,接口
- python学习之路-基础篇-面向对象-day05
- C++ 类的静态成员详细讲解
- ArrayList和LinkedList的区别
- MFC 中出现这种错误winhand.cpp line 218