一种重要的数据结构 -- 树

概述

树是经常用到的一种数据结构,他是一种非线性的数据结构,以分层的方式存储数据。树经常被用来存储有层级关系的数据,有时候还被用来存储有序列表。每棵树都是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

树具有以下的特点:

①  每个节点有零个或多个子节点;

②  没有父节点的节点称为根节点;

③  每一个非根节点有且只有一个父节点;

④  除了根节点外,每个子节点可以分为多个不相交的子树;

除此之外,我们还要了解几个基本概念:

节点的度:一个节点含有的子树的个数为该节点的度;

树的度:一棵树中,最大的节点的度称为树的度;

叶子节点:度为0的结点称为叶节点;

子节点:一个节点含有的子树的根节点称为该结点的子节点;

父节点:若一个节点含有子节点,则这个节点成为其子节点的父节点;

根节点:没有父节点的节点;

节点的层次:从根节点开始定义,根为第一层,根的子节点为第2层,以此类推;

深度 / 高度:树中节点的最大层次;


二叉树

二叉树是数据结构中一种重要的数据结构,也是树家族最为基础的结构。

二叉树


二叉树基本特点:

二叉树的每个结点至多只有二棵子树(不存在度大于2的结点);

二叉树的子树有左右之分,次序不能颠倒;

二叉树的第i层至多有2^i-1个结点;深度为k的二叉树至多有2^k-1个结点;

对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1


特别的二叉树:

满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点。所有叶子结点必须在同一层上

完全二叉树

完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~(h-1)层) 的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。

完全二叉树

注:完全二叉树是效率很高的数据结构,堆是一种完全二叉树或者近似完全二叉树,所以效率极高,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化,二叉排序树的效率也要借助平衡性来提高,而平衡性基于完全二叉树。

接下来我们来简单说说二叉树的代码实现:

class TreeNode {

    constructor(data, left, right){

        this.data = data

        this.left = left   // 左边的子节点

        this.right = right  // 右边的子节点

    }

    show(){

        console.log(this.data)

    }

}

二叉树的遍历方式

先序遍历:先根节点->遍历左子树->遍历右子树

中序遍历:遍历左子树->根节点->遍历右子树

后序遍历:遍历左子树->遍历右子树->根节点

遍历图解
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容