疯狂Java——树和二叉树(第11章)

树代表一种非线性的数据结构。

术语:

叶子节点:没有子节点的节点,因此叶子节点不可作为父节点;

节点的度:节点拥有的子树的个数被称为该节点的度(degree);

树的度:树中所有节点的度的最大值就是该树的度;

节点层次:节点的层次从根开始算起,根的层次值为1,其余节点的层次值为父节点层次值加1;

树的深度(depth):树中节点的最大层次值称为树的深度或高度;

有序树与无序树:如果将树中节点的各个子树看成从左到右是有序的(即不能互换),则称该树为有序树,否则称为无序树。

父亲点表示法:每个子节点都记录它的父节点;(这种方式是从子节点着手)

孩子链表示法:每个非叶子节点通过一个链表来记录它所有的子节点。(这种方式是从父节点着手,特点:每个节点都可以快速找到它的所有子节点)如下图:

二叉树:每个节点最多只有两个子树的有序树

满二叉树:如果一棵二叉树的深度为k,则其包含2k-1个节点。满二叉树如下图:

完全二叉树:一棵有n个节点的二叉树,按满二叉树的编号方式对他进行编号,若树中所有节点和满二叉树1-n编号完全一致,则称该树为完全二叉树。也就是说除最后一层外,其余层的所有节点都是满的。如下图:

 

 二叉树性质:

1)在任何一棵二叉树中,如果其叶子节点的数量为N0,度为2的子节点数量为N1,则N0=N1+1;

2)具有N个节点的完全二叉树的深度为log2N+1;

二叉树的二叉链表存储的思想:让每个节点都能记住它的左、右两个节点。为每个节点增加left、right两个指针,分别引用该节点的左、右两个子节点。

二叉树的三叉链表存储的思想:让每个节点不仅记住它的左右节点,还能记住它的父节点,利用指针parent。

遍历二叉树

I、先序遍历:

    1)访问根节点;

    2)递归遍历左子树;

    3)递归遍历右子树;

II、中序遍历:

    1)递归遍历左子树;

    2)访问根节点;

    3)递归遍历右子树;

III、后序遍历:

         1)递归遍历右子树;

    2)访问根节点;

    3)递归遍历左子树;

广度优先遍历:按层遍历;

 

 

转载于:https://www.cnblogs.com/lchzlp/p/7422282.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值