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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了疯狂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)递归遍历左子树;

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

 

 

以上是关于疯狂Java——树和二叉树(第11章)的主要内容,如果未能解决你的问题,请参考以下文章

6-4-线索二叉树-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版

6-1-二叉树顺序存储结构-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版

数据结构学习之第7章 树和二叉树

树和二叉树-第6章-《数据结构题集》习题解析-严蔚敏吴伟民版

6-5-树的双亲表示法-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版

Java 数据结构树和二叉树