树结构概述
什么是树结构
树形结构是一层次的嵌套结构。 一个树形结构的外层和内层有相似的结构, 所以这种结构多可以递归的表示。经典数据结构中的各种树状图是一种典型的树形结构:一颗树可以简单的表示为根, 左子树, 右子树。 左子树和右子树又有自己的子树。
树的基本概念
- 根结点: 它是同一棵树中除本身外所有结点的祖先,没有父结点。图中根结点为1。
- 父节点: 结点的上层结点叫做该结点的父结点。图中10的父结点是7。
- 子节点: 下一层的结点均为上一层的子节点。
- 结点的度: 结点所拥有子结点的个数。图中5的度为2.
- 路径: 从根结点到访问的结点,且经过其他的结点。
- 叶子结点: 度为0的结点,也叫终端结点。
- 分支结点: 度不为0的结点,也叫非终端结点或内部结点。
- 结点的层次: 从根结点到树中某结点所经路径上的分支数称为该结点的层次。根结点的层次规定为1,其余结点的层次等于其双亲结点的层次加1。
- 树的深度: 树中结点的最大层次数。
- 森林: m(m≥0)棵树的集合。
二叉树
什么是二叉树
二叉树:
- 任何一个结点的子结点数量均不超过2。
- 二叉树的子结点分为左结点和右结点。
满二叉树
所有叶子结点都在最后一层,而且结点的的总数为:2^n-1 (n是树的高度)
完全二叉树
所有叶子结点都在最后一层或倒数第二层,且最后一层的叶子结点在左边连续,倒数第二节的叶子结点在右边连续
链式存储结构
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。
通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。其结点结构为:
二叉树的创建及遍历
public class BinaryTree {
TreeNode root;
//设置根结点
public void setRoot(TreeNode root) {
this.root = root;
}
//获取根结点
public TreeNode getRoot() {
return root;
}
//前序遍历
public void frontShow(){
if(root!null){
root.frontShow();
}
}
//中序遍历
public void midShow(){
if(root!=null){
root.midShow();
}
}
//后序遍历
public void afterShow(){
if(root!=null){
root.afterShow();
}
}
public class TestBinaryTree {
public static void main(String[] args) {
//创建一棵树
BinaryTree binTree = new BinaryTree();
//创建一个根结点
TreeNode root = new TreeNode