有根树
**从数学来看,树结构是一种特殊的图。同样可以认为是定义在一组元素之间的二元关系。两者之间有关系就引入一条边。
但计算机中树和数学中的树又有不同,计算机中需要每一棵树指定一个特殊的唯一的顶点,称为根root,一棵一般意义上的树,只要指定了其中的一个顶点作为根。他就称着有根树,通过嵌套,小型有根树可以组合成规模更大的有根树。**
有序树
小型有根树组的更大的有根树节点称为父亲。这些小型的树称为孩子。同一个根节点的节点之间互称为兄弟,一个节点所拥有的孩子节点个数称为度(degree)。规定了各兄弟之间次序的树称之为有序树。
我的总结
当成双链表来看,也不难,这期的代码注释我写的很清楚
节点类,定义节点
public class TreeNode {
TreeNode lc,rc,parent;
//定义树的高度默认为0
int height = 0;
//节点中保存的数据为int
int data;
//红黑树中使用color
boolean color;
}
方法类,用于定义树调用的方法的
public class TreeMethod {
//用于记录节点数量
int size = 0;
//添加根节点需要返回节点
public TreeNode addRootNode(int val){
//创建节点对象,有new就是创建对象
TreeNode root = new TreeNode();
//给根节点赋值
root.data = val;
//对size进行加加,size记录节点数
size++;
return root;
}
//添加左右分支节点method为true时默认为添加左节点,否则为右,root作为父亲节点
public TreeNode addRightOrLeftNode(TreeNode root,int val,boolean method){
//创建节点对象
TreeNode newNode = new TreeNode();
//对节点data赋值val
newNode.data = val;
//如果method为true执行判断语句中的代码
if (method) root.lc = newNode;
//method不为true时执行
root.rc = newNode;
//将节点的父亲节点指向root
newNode.parent = root;
//对size进行加加,size记录节点数
size++;
//返回创建的节点
return newNode;
}
//使用递归来对树进行遍历(使用中序遍历)
public void RecursionTraversal(TreeNode root){
//当root遍历到最后为空节点的时候结束
if (root == null) return;
RecursionTraversal(root.lc);
//中序遍历需要根节点输入到左右节点的中间
System.out.print(root.data + "\t");
RecursionTraversal(root.rc);
}
}
测试类,运行Java的类就是这个,上面两个类是辅助这个类测试的
public class TestTreeNode {
public static void main(String[] args) {
//创建方法调用类的对象
TreeMethod tree = new TreeMethod();
//调用TreeMethod类里面的addRootNode方法添加一个根节点
//并接收返回的节点
TreeNode root = tree.addRootNode(77);
//给根节点添加一个左分支
TreeNode node44 = tree.addRightOrLeftNode(root,44,true);
//给根节点添加一个右分支
TreeNode node55 = tree.addRightOrLeftNode(root,55,false);
//遍历输出data 输出结果为44 77 55
tree.RecursionTraversal(root);
}
}
输出结果为:44 77 55
评论 (0)