Java中树的创建

渡星河
2022-11-29 / 0 评论 / 13 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年11月29日,已超过660天没有更新,若内容或图片失效,请留言反馈。

有根树

**从数学来看,树结构是一种特殊的图。同样可以认为是定义在一组元素之间的二元关系。两者之间有关系就引入一条边。
但计算机中树和数学中的树又有不同,计算机中需要每一棵树指定一个特殊的唯一的顶点,称为根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
1

评论 (0)

取消