用html做家谱网站代码,个性化网站制作,网络推广战略,利用网站做蜘蛛池【Java数据结构】树 一、树型结构1.1 概念1.2 特点1.3 树的类型1.4 树的遍历方式1.5 树的表示形式1.5.1 双亲表示法1.5.2 孩子表示法1.5.3 孩子双亲表示法1.5.4 孩子兄弟表示法 二、树型概念#xff08;重点#xff09; 此篇博客希望对你有所帮助#xff08;帮助你了解树重点 此篇博客希望对你有所帮助帮助你了解树为下篇博客二叉树奠定基础不懂的或有错误的也可在评论区留言错误必改评论必回持续关注下一篇博客是二叉树 一、树型结构
1.1 概念 树是一种非线性的数据结构它是由nn0个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树也就是说它的根朝上而叶朝下的。 1.2 特点 有一个特殊的结点称为根结点根节点是没有前驱。没有父结点。除了结点外其余结点被分成M(M0)个互不相交的集合T1、T2、…、Tm其中每个集合又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱父结点可以有0或多个后继子结点。树是递归定义。树型结构中子树之间不能有交集否则就不是树型结构。 1.3 树的类型 二叉树Binary Tree每个节点最多有两个子节点通常称为左子节点和右子节点。 满二叉树Full Binary Tree除了叶子节点外每个节点都有两个子节点。完全二叉树Complete Binary Tree所有层除了最后一层都是满的并且最后一层的节点从左到右连续填充。平衡二叉树Balanced Binary Tree每个节点的两个子树的高度差不超过1。 二叉搜索树Binary Search Tree, BST满足以下性质的二叉树对于每个节点其左子树中所有节点的值都小于该节点的值其右子树中所有节点的值都大于该节点的值。B树B-Tree一种自平衡的树广泛用于数据库和文件系统中可以容纳多个值的节点。List item红黑树Red-Black Tree一种自平衡的二叉搜索树具有严格的平衡要求每个节点都有一个表示颜色的位红或黑。Trie树Trie 或 Prefix Tree一种用于存储字符串集合的树结构主要用于字典和前缀匹配。 1.4 树的遍历方式
遍历是访问树中所有节点的过程主要有以下几种方式 前序遍历Preorder Traversal根节点 - 左子树 - 右子树中序遍历Inorder Traversal左子树 - 根节点 - 右子树对于二叉搜索树这是升序访问所有节点的方式后序遍历Postorder Traversal左子树 - 右子树 - 根节点层次遍历Level Order Traversal按层次从上到下、从左到右访问节点通常使用队列实现。 举例 前序遍历A B C D E F 中序遍历C B D A E F 后序遍历 C D B F E A 层次遍历 A B E C D F
1.5 树的表示形式
表示形式双亲表示法、孩子表示法、孩子双亲表示法、孩子兄弟表示法等等。
1.5.1 双亲表示法
双亲表示法使用一个数组来存储树的节点其中每个节点包含一个数据域和一个指向其父节点的指针或索引。
class TreeNodeParent { int data; // 节点数据 int parent; // 父节点索引TreeNodeParent(int data, int parent) { this.data data; this.parent parent; }
} 1.5.2 孩子表示法
孩子表示法使用一个数组来存储树的节点并为每个节点维护一个链表链表中的元素是该节点的所有孩子节点。
class TreeNodeChild { int data; // 节点数据 ListTreeNodeChild children; // 孩子节点列表 TreeNodeChild(int data) { this.data data; this.children new LinkedList(); }
} 1.5.3 孩子双亲表示法
孩子双亲表示法结合了双亲表示法和孩子表示法每个节点既包含指向其父节点的指针或索引又包含指向其孩子节点的链表。
class TreeNodeChildParent { int data; // 节点数据 int parent; // 父节点索引若为-1则表示该节点为根节点 ListTreeNodeChildParent children; // 孩子节点列表 TreeNodeChildParent(int data, int parent) { this.data data; this.parent parent; this.children new LinkedList(); }
} 1.5.4 孩子兄弟表示法
孩子兄弟表示法使用两个指针或索引分别指向节点的第一个孩子节点和右兄弟节点。这种方法可以方便地表示任意树结构。
class TreeNode {int data; // 树中存储的数据Node firstChild; // 第一个孩子引用Node nextBrother; // 下一个兄弟引用
}二、树型概念重点
结点的度一个结点含有子树的个数称为该结点的度树的度一棵树中所有结点度的最大值称为树的度叶子结点或终端结点度为0的结点称为叶结点双亲结点或父结点若一个结点含有子结点则这个结点称为其子结点的父结点孩子结点或子结点一个结点含有的子树的根结点称为该结点的子结点根结点一棵树中没有双亲结点的结点结点的层次从根开始定义起根为第1层根的子结点为第2层以此类推树的高度或深度树中结点的最大层次非终端结点或分支结点度不为0的结点兄弟结点具有相同父结点的结点互称为兄弟结点堂兄弟结点双亲在同一层的结点互为堂兄弟结点的祖先从根到该结点所经分支上的所有结点子孙以某结点为根的子树中任一结点都称为该结点的子孙森林由mm0棵互不相交的树组成的集合称为森林。