树
树是一种抽象数据类型,用来模拟具有树状结构性质的数据集合。它是由有限个数节点通过连接,组成一个具有层次关系的集合。形状像根朝上,叶朝下的树。
1.节点:节点一般代表对象。又分为根节点、枝节点、叶结点,
2.边:连接节点的线称为边,边表示节点的关联关系。一般从一个节点到另一个节点的唯一方法就是沿着一条顺着有边的道路前进。
其它概念
1.路径:顺着节点的边从一个节点走到另一个节点,所经过的节点的顺序排列就称为“路径”。
2.根:树顶端的节点称为根,每个树都只有一个根,(例如图中的A为根)如果要把一个节点和边的集合称为树,那么从根到其他任何一个节点都必须有且只有一条路径,A是根节点。
3.父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,A是B和C的父节点。
4.子节点:一个节点含有的子树的根节点称为该节点的子节点,B和C是A的子节点。
5.兄弟节点:具有相同父节点的节点互称为兄弟节点,B和C互为兄弟结点。
6.
叶节点
:没有子节点的节点称为叶节点,也叫叶子节点,例如E、F、Y和Z。
7.
枝节点
:既有父节点又有子节点的是枝节点。
8.节点的层次:从根开始定义,根为第一层,根的子节点为第二层,以此类推。
9.深度:对于任意节点n,n的深度为从根到n的唯一路径长,根的深度为0。
10.高度:对于任意节点n,n的高度为从n到一片树叶的最长路径长,所有树叶的高度为0。
二叉树
每个节点最多只能有两个子节点的树叫做二叉树。
二叉树的子节点又被称为左子节点和右子节点。
树的遍历
中序遍历:左子树—根节点—右子树
前序遍历:根节点—左子树—右子树
后序遍历:左子树—右子树—根节点
二叉树节点和二叉树的建立
一个二叉树节点中的信息包括父节点、左子节点、右子节点,和节点内部的数据:
class TreeNode {
public TreeNode parent;//父节点
public TreeNode left;//左节点
public TreeNode right;//右节点
//节点是用来存数据的,节点内部的数据:
public Object data;
}
创建二叉树时,要通过每个节点的parent、left、right把节点联系到一起:
public TreeNode createTree(){
//首先创建根节点
TreeNode root=new TreeNode();
//根节点数据
root.data=“aaa”;
//创建多个节点并添加数据
TreeNode r1=new TreeNode();
r1.data=“bbb”;
TreeNode r11=new TreeNode();
r11.data="dddd";
TreeNode r12=new TreeNode();
r12.data="eeee";
//将节点联系在一起
r1.left=r11;
r1.right=r12;
r11.parent=r1;
r12.parent=r1;
TreeNode r2=new TreeNode();
r2.data="cccc";
TreeNode r21=new TreeNode();
r21.data="ffff";
TreeNode r22=new TreeNode();
r22.data="jjjjjj";
r2.left=r21;
r2.right=r22;
r21.parent=r2;
r22.parent=r2;
//连起来三个节点:
root.left=r1;
root.right=r2;
r1.parent=root;
r2.parent=root;
return root;
}