数据结构学习-二叉树

二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。

二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。

满二叉树:所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上

完全二叉树:树从上至下,从左至右都存在对应于满二叉树中的节点(包括叶节点)。

    满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

二叉树的遍历:

先序遍历:DLR

    (1)访问根结点;
    (2)先序遍历根结点的左子树;
    (3)先序遍历根结点的右子树。

中序遍历:LDR

    (1)中序遍历根结点的左子树;
    (2)访问根结点;
    (3)中序遍历根结点的右子树。

后序遍历:LRD

    (1)后序遍历根结点的左子树;
    (2)后序遍历根结点的右子树。
    (3)访问根结点;

层次遍历:逐层遍历,先遍历完一层的LDR,在根据规则遍历下一层。可使用队列来实现。

    (1)访问该元素所指结点;
    (2)若该元素所指结点的左、右孩子结点非空,则将该元素所指结点的左孩子指针和右孩子指针顺序入队。

实现遍历的方法:

  1.队列(先进先出),适合于广度搜索,即层级遍历

  2.栈(先进后出),适合于深度搜索,即深程遍历

  3.递归方法,适合于深度搜索,即深程遍历

  4.使用三叉链表存储,即存储父级指针,不用堆栈即可返回父级。

  5.逆转链,将再深入的子级节点中存入父级节点地址,无需扩展,但是多用户操作时需考虑锁问题

  6.线索二叉树上遍历。

线索二叉树:

  加了指向前驱节点和后驱节点的指针的二叉树称为线索二叉树。

最优二叉树:哈夫曼树,Haffman树

    对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。.所有叶节点权值*对应路径长度,它们之和就是带权路径长度。

    一棵二叉树要使其WPL 值最小,必须使权值越大的叶结点越靠近根结点,而权值越小的叶结点越远离根结点,这样的带权路径最小。

    (1)由给定的n 个权值{W1,W2,…,Wn}构造n 棵只有一个叶结点的二叉树,从而得到一个二叉树的集合F={T1,T2,…,Tn};

    (2)在F 中选取根结点的权值最小和次小的两棵二叉树作为左、右子树构造一棵新的二叉树,这棵新的二叉树根结点的权值为其左、右子树根结点权值之和;

    (3)在集合F 中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到集合F 中;

    (4)重复(2)(3)两步,当F 中只剩下一棵二叉树时,这棵二叉树便是所要建立的哈夫曼树。

 

二叉树的应用:

  1.查找数据元素

  2.统计出给定二叉树中叶子节点的数量

  3.表达式运算

  4.哈夫曼树在通信中构造最短发送数据。没有二义性,凡是哈夫曼树设计出来的编码,其包含的信息就是唯一的。

  5.哈夫曼树在判断中的应用。

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值