21xrx.com
2024-09-20 05:48:11 Friday
登录
文章检索 我的文章 写文章
Java课程设计案例精编:通过三种数据结构实现树形结构
2023-06-18 04:25:04 深夜i     --     --
Java 数据结构 树形结构

在Java课程设计中,很多题目都需要我们实现一些树形结构,例如二叉树、红黑树等。在这篇文章中,我们将通过三种不同的数据结构来实现树形结构,包括ArrayList、LinkedList和HashMap。在代码实现方面,我们将章节分为三节,每一节分别实现一个数据结构。

第一节,我们将使用ArrayList实现简单的二叉树。二叉树是树形结构中简单的一种,所以我们将首先实现它。通过ArrayList的储存方式,我们可以很方便地实现二叉树的节点。代码案例如下:


import java.util.ArrayList;

public class BinaryTreeNode {

  int value;

  BinaryTreeNode left;

  BinaryTreeNode right;

  BinaryTreeNode(int value)

    this.value = value;

    left = null;

    right = null;

  

}

public class BinaryTree {

  private ArrayList nodeList;

  BinaryTree() {

    nodeList = new ArrayList ();

  }

  public void buildTree(int[] array) {

    for (int i = 0; i < array.length; i++) {

      BinaryTreeNode node = new BinaryTreeNode(array[i]);

      nodeList.add(i, node);

      if (i > 0) {

        int n = i / 2;

        if (i % 2 == 0) {

          nodeList.get(n - 1).right = node;

        } else {

          nodeList.get(n).left = node;

        }

      }

    }

  }

}

第二节,我们将使用LinkedList来实现一棵树形结构,这里我们将实现一棵有向树,它具有很好的可扩展性。我们将通过LinkedList来实现节点间的关系。在这个例子中,我们将实现一棵文件目录树,用来展示文件夹之间的关系。代码案例如下:


import java.util.LinkedList;

public class DirectoryTreeNode {

  String name;

  LinkedList children;

  public DirectoryTreeNode(String name) {

    this.name = name;

    children = new LinkedList ();

  }

  public void addChild(DirectoryTreeNode child) {

    children.addLast(child);

  }

  public void removeChild(DirectoryTreeNode child) {

    children.remove(child);

  }

}

public class DirectoryTree {

  private DirectoryTreeNode root;

  public DirectoryTree(String rootName) {

    root = new DirectoryTreeNode(rootName);

  }

  public DirectoryTreeNode getRoot()

    return root;

  

}

第三节,我们将使用HashMap来实现一棵哈夫曼树,这是通过字符出现频率来构建树形结构的一种方式。在这个例子中,我们将通过HashMap来储存字符及其出现的次数,然后通过哈夫曼算法来构造哈夫曼树。代码案例如下:


import java.util.Comparator;

import java.util.HashMap;

import java.util.Map;

import java.util.PriorityQueue;

public class HuffmanNode {

  String text;

  int frequency;

  HuffmanNode leftChild;

  HuffmanNode rightChild;

  public HuffmanNode() {}

  public HuffmanNode(String text, int frequency)

    this.text = text;

    this.frequency = frequency;

  

}

public class HuffmanTree {

  private HuffmanNode root;

  public HuffmanTree(Map frequencyMap) {

    PriorityQueue priorityQueue = new PriorityQueue (

        Comparator.comparing(HuffmanNode::getFrequency));

    for (Map.Entry entry : frequencyMap.entrySet()) {

      HuffmanNode node = new HuffmanNode(entry.getKey(), entry.getValue());

      priorityQueue.add(node);

    }

    while (priorityQueue.size() > 1) {

      HuffmanNode firstNode = priorityQueue.poll();

      HuffmanNode secondNode = priorityQueue.poll();

      HuffmanNode parentNode = new HuffmanNode(firstNode.text + secondNode.text,

          firstNode.frequency + secondNode.frequency);

      parentNode.leftChild = firstNode;

      parentNode.rightChild = secondNode;

      priorityQueue.add(parentNode);

    }

    root = priorityQueue.poll();

  }

}

通过以上三个例子,我们可以看到通过不同的数据结构,我们可以实现不同类型的树形结构。不同的数据结构有不同的适用场合,我们应根据应用场景来选择合适的数据结构。这么说来,Java编程中的数据结构真的很重要呢!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复