zoukankan      html  css  js  c++  java
  • 二叉树

    1、二叉树

    1.1二叉树vs数组和链表

    1)数组存储方式分析
    优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。
    缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。

    2)链表的存储方式分析
    优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)。
    缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)

    3)树的存储方式
    能提高数据存储,读取的效率,比如利用 二叉排序树(Binary Sort Tree),既可以保证数据的检索速度,同时也可以保证数据的插入,删除,修改的速度

    1.2树的示意图

    1)节点
    2)根节点
    3)父节点
    4)子节点
    5)叶子节点(没有子节点的节点)
    6)节点的权(节点值)户
    7)路径(从root节点找到该节点的路线
    8))层
    9)子树
    10)树的高度(最大层数)
    11)森林:多颗子树构成森林

    1.3树的概念

    1)树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树。
    2)二叉树的子节点分为左节点和右节点

    3)如果该二叉树的所有叶子节点都在最后一层,并且结点总数= 2^n -1 , n 为层数,则我们称为满二叉树。

    4)如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,我们称为完全二叉树

    1.4二叉树的遍历

    1. 前序遍历: 先输出父节点,再遍历左子树和右子树

    2. 中序遍历: 先遍历左子树,再输出父节点,再遍历右子树

    3. 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点

    例子

    1.5顺序存储二叉树


    从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组

    1. 如图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6]
    2. 要求在遍历数组 arr 时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历

    一、特点

    1. 顺序二叉树通常只考虑完全二叉树
    2. 第 n 个元素的左子节点为 2 * n + 1
    3. 第 n 个元素的右子节点为 2 * n + 2
    4. 第 n 个元素的父节点为 (n-1) / 2
    5. n : 表示二叉树中的第几个元素(按 0 开始编号如图所示)

    1.6线索二叉树

    基本介绍

    1. n 个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")
    2. 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种
    3. 一个结点的前一个结点,称为前驱结点
    4. 一个结点的后一个结点,称为后继结点
  • 相关阅读:
    过滤选择器——简单过滤选择器
    层次选择器
    选择器——2——基本选择器
    This is a secret
    iframe加载问题
    懒加载
    biubiubiu
    使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性
    HTML中       等6种空白空格的区别
    ASP.NET 4.0的ClientIDMode属性
  • 原文地址:https://www.cnblogs.com/mankaixin/p/13304576.html
Copyright © 2011-2022 走看看