「java怎么树状」java中的树结构

博主:adminadmin 2022-12-06 12:18:06 61

本篇文章给大家谈谈java怎么树状,以及java中的树结构对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何用Java实现树形结构啊?

package tree;

import java.util.LinkedList;

import java.util.List;

/**

* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历

*

* 参考资料0:数据结构(C语言版)严蔚敏

*

* 参考资料1:

*

* 参考资料2:

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

public class BinTreeTraverse2 {

private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

private static ListNode nodeList = null;

/**

* 内部类:节点

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

private static class Node {

Node leftChild;

Node rightChild;

int data;

Node(int newData) {

leftChild = null;

rightChild = null;

data = newData;

}

}

public void createBinTree() {

nodeList = new LinkedListNode();

// 将一个数组的值依次转换为Node节点

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

nodeList.add(new Node(array[nodeIndex]));

}

// 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树

for (int parentIndex = 0; parentIndex array.length / 2 - 1; parentIndex++) {

// 左孩子

nodeList.get(parentIndex).leftChild = nodeList

.get(parentIndex * 2 + 1);

// 右孩子

nodeList.get(parentIndex).rightChild = nodeList

.get(parentIndex * 2 + 2);

}

// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理

int lastParentIndex = array.length / 2 - 1;

// 左孩子

nodeList.get(lastParentIndex).leftChild = nodeList

.get(lastParentIndex * 2 + 1);

// 右孩子,如果数组的长度为奇数才建立右孩子

if (array.length % 2 == 1) {

nodeList.get(lastParentIndex).rightChild = nodeList

.get(lastParentIndex * 2 + 2);

}

}

/**

* 先序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void preOrderTraverse(Node node) {

if (node == null)

return;

System.out.print(node.data + " ");

preOrderTraverse(node.leftChild);

preOrderTraverse(node.rightChild);

}

/**

* 中序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void inOrderTraverse(Node node) {

if (node == null)

return;

inOrderTraverse(node.leftChild);

System.out.print(node.data + " ");

inOrderTraverse(node.rightChild);

}

/**

* 后序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void postOrderTraverse(Node node) {

if (node == null)

return;

postOrderTraverse(node.leftChild);

postOrderTraverse(node.rightChild);

System.out.print(node.data + " ");

}

public static void main(String[] args) {

BinTreeTraverse2 binTree = new BinTreeTraverse2();

binTree.createBinTree();

// nodeList中第0个索引处的值即为根节点

Node root = nodeList.get(0);

System.out.println("先序遍历:");

preOrderTraverse(root);

System.out.println();

System.out.println("中序遍历:");

inOrderTraverse(root);

System.out.println();

System.out.println("后序遍历:");

postOrderTraverse(root);

}

}

java怎么设置树状列表使得其默认为展开

树状列表一般都是动态生成的(java后台实现),所以java只负责发送这些html代码,而页面控制就要交给前端的js来控制

所以要设置列表默认展开,只要把该区域的div设置为非隐藏即可

也可以使用js的一些类库来实现树状列表

请问这个树状图在Java中应该怎么做?

打个比方

可以写一个Tree的类

public class Tree extends BaseDomain {

private String id;

private String key;

private String icon;

private String title;

private String value;

private String text;

private String code;

private String mtype;

private String type;

/**

* 部门的特殊个别字段

* 1.部门 / 2.岗位 的编码

*/

private String number;

private Double order;

private Double sort;

private String href;

private String component;

private ListTreeT children;

private String parentId;

private boolean hasParent = false;

private boolean hasChildren = false;

private Date createTime;

private Date modifyTime;

public void initChildren(){

this.children = new ArrayList();

}

}

在写一个工具类

public class TreeUtil {

protected TreeUtil() {

}

private final static String TOP_NODE_ID = "0";

/**

* 用于构建菜单

*

* @param nodes nodes

* @param T   T

* @return T TreeT

*/

public static T TreeT build(ListTreeT nodes) {

if (nodes == null) {

return null;

}

ListTreeT topNodes = new ArrayList();

nodes.forEach(node - {

String pid = node.getParentId();

if (pid == null || TOP_NODE_ID.equals(pid)) {

topNodes.add(node);

return;

}

for (TreeT n : nodes) {

String id = n.getId();

if (id != null id.equals(pid)) {

if (n.getChildren() == null)

n.initChildren();

n.getChildren().add(node);

node.setHasParent(true);

n.setHasChildren(true);

n.setHasParent(true);

return;

}

}

if (topNodes.isEmpty())

topNodes.add(node);

});

TreeT root = new Tree();

root.setId("0");

root.setParentId("");

root.setHasParent(false);

root.setHasChildren(true);

root.setChildren(topNodes);

root.setText("root");

return root;

}

}

写完了这两个在写业务层

一个构建书的方法

private void buildTrees(List trees, List menus, List ids) {

menus.forEach(menu - {

ids.add(menu.getId().toString());

Tree tree = new Tree();

tree.setId(menu.getId().toString());

tree.setKey(tree.getId());

tree.setParentId(menu.getParentId().toString());

tree.setText(menu.getName());

tree.setTitle(tree.getText());

tree.setIcon(menu.getIcon());

tree.setComponent(menu.getComponent());

tree.setCreateTime(menu.getCreateTime());

tree.setCreateTime(menu.getCreateTime());

tree.setHref(menu.getHref());

tree.setSort(menu.getSort());

tree.setCode(menu.getCode());

tree.setMtype(menu.getMtype());

trees.add(tree);

});

}

MapString, Object result = new HashMap();

ListDept depts = findDepts(dept, request);

ListTreeDept trees = new ArrayList();

buildTrees(trees, depts);

TreeDept deptTree = TreeUtil.build(trees);

result.put("rows", deptTree);

result.put("total", depts.size());

关于java怎么树状和java中的树结构的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-06,除非注明,否则均为首码项目网原创文章,转载请注明出处。