返回Java节点中的节点列表父节点可以有多个子节点
发布时间:2020-12-15 02:56:51 所属栏目:Java 来源:网络整理
导读:我正在尝试编写 java代码以返回树中的节点列表. 树看起来像 节点类是 class Node{ String label; ListNode children;} 我正在尝试这种方式.但是无法理解如何编写循环来遍历. public ListNode returnAllNodes(Node node){ ListNode listOfNodes = new ArrayLi
我正在尝试编写
java代码以返回树中的节点列表.
树看起来像 节点类是 class Node{ String label; List<Node> children; } 我正在尝试这种方式.但是无法理解如何编写循环来遍历. public List<Node> returnAllNodes(Node node){ List<Node> listOfNodes = new ArrayList<Node>(); boolean iterationCompleted = false; if(node==null){ return null; } while(!iterationCompleted){ if(node.getChildren()==null){ listOfNodes.add(node); break; } else{ // } } return null; //return traverseAndReturnAllNodes(node.getChildren().get(0)); } 请帮忙. 解决方法
如果您确定结构是树(节点不能有多个父节点),则会按深度优先顺序列出节点:
public static List<Node> returnAllNodes(Node node){ List<Node> listOfNodes = new ArrayList<Node>(); addAllNodes(node,listOfNodes); return listOfNodes; } private static void addAllNodes(Node node,List<Node> listOfNodes) { if (node != null) { listOfNodes.add(node); List<Node> children = node.getChildren(); if (children != null) { for (Node child: children) { addAllNodes(child,listOfNodes); } } } } 如果节点可以有多个父节点,请将addAllNodes的第一行更改为: if (node != null && !listOfNodes.contains(node)) { 广度优先算法如下: public static List<Node> returnAllNodes(Node node){ List<Node> listOfNodes = new ArrayList<Node>(); if (node != null) { listOfNodes.add(node); for(int i = 0; i < listOfNodes.size(); ++i) { Node n = listOfNodes.get(i); List<Node> children = n.getChildren(); if (children != null) { for (Node child: children) { if (!listOfNodes.contains(child)) { listOfNodes.add(child); } } } } } return listOfNodes; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |