构建一个树

发布时间:2024年01月21日

1.先规划一个node树

//构建一个node,一个value 和左右两个节点
class node{
    int value;
    node left;
    node right;

    @Override
    public String toString() {
        return value+" ";
    }
}

2.构建树,左子树比节点小,右子树比节点大。,添加的方式采用的递归,判断大小,再一层层找是否有空位,没位置再递归到下一层。直到有位置结束

  //构建树
    public  void creatNodeTree(int num) {
        //先做出判断是否首届点为空
        if (root == null) {
            //如果为空,则我加入的是第一个
            root = new node();
            root.value = num;
        } else {
            //不为空,我要进行判断,左边放比中间小的,右边放比中间大的。如果没有位置,则进行递归
            addNodeTree(num, root);
        }
    }


    //不为空,我要进行判断,左边放比中间小的,右边放比中间大的。如果没有位置,则进行递归
    private void addNodeTree(int num, node nodeTree) {
        //第一次先判断大小,再第二层判断是否为空
        if (num < nodeTree.value){
            //再判断是否为空
            if (nodeTree.left == null){
                //为空,则直接放进去
                nodeTree.left = new node();
                nodeTree.left.value = num;
            }else {
                //不为空则,递归到他的下一层
                addNodeTree(num,nodeTree.left);
            }
        }else {
            //如果比中间大则
            //再判断是否为空
            if (nodeTree.right == null){
                //为空,则直接放进去
                nodeTree.right = new node();
                nodeTree.right.value = num;
            }else {
                //不为空则,递归到他的下一层
                addNodeTree(num,nodeTree.right);
        }
    }
}

3.构建好树,遍历树,采用出对入队的方式,先进的先出,为了方便显示是一个树的结构,一层层入队再出队。出队后再获取它的左右子树地址,再次入队,进入下一层遍历,再出队,直到没有数再入队,队列里是空的,就结束了。

//遍历整个树,采用出对入队一层层遍历
    public void findNodeTree(){
        //先检查是否为空
        if (root == null){
            System.out.println("二叉树为空");
            return;
        }
        //获取一个队列
        Queue<node> queue = new LinkedList<>();
        //加入头节点
        queue.add(root);
        //做一个循环,只要没有新的树在入队,入队为空,则停止遍历
        while (!queue.isEmpty()){
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                //出队
                node nodeQueue = queue.poll();
                if (nodeQueue == null){
                    continue;
                }
                System.out.print(nodeQueue +"");
                //出队一个数,再找他的左右节点再次入队
                queue.offer(nodeQueue.left);
                queue.offer(nodeQueue.right);

            }
            System.out.println();
        }
    }

4.检查一下

 public static void main(String[] args) {
        nodeTree a = new nodeTree();
        a.creatNodeTree(100);
        a.creatNodeTree(110);
        a.creatNodeTree(105);
        a.creatNodeTree(90);
        a.creatNodeTree(95);
        a.creatNodeTree(98);
        a.creatNodeTree(120);
        a.findNodeTree();
    }

最终结果,树的存储结构

文章来源:https://blog.csdn.net/2301_79456272/article/details/135652482
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。