标签:sys list() imp nod details 添加节点 sdn 指定 null
// 搜索一棵多叉树
// 结点的值 唯一,无序
// 输入: 树的根结点 root, 指定的值target
// 输出: 一个bool值,标志 指定的值target 是否在树里面
树节点的结构类
package com.hc.manager.test; import java.util.ArrayList; import java.util.List; public class Node { private int key; //节点 private String data; //节点数据 public List childNodes = new ArrayList<Node>(); //多个子节点 public Node(int key) { this.key = key; } public Node(int key ,String data) { this.key = key; this.data = data; } public int getKey() { return key; } public void setKey(int key) { this.key = key; } public String getData() { return data; } public void setData(String data) { this.data = data; } public List getChildNodes() { return childNodes; } public void setChildNodes(List childNodes) { this.childNodes = childNodes; } }
树类
package com.hc.manager.test; import java.util.List; public class Tree { private Node root = new Node(0, "根");//树根 private int key = 1; //节点数,为防止节点冲突,使用key++来添加节点数据 private int index = 0; public Node getRoot() { return this.root; } public void add(int parentId, String vData) { this.add(parentId, vData, getRoot().childNodes);//如果没有设置上一个树节点的话,就使用根节点 } public void add(int parentId, String vData, List<Node> childNodes) { //指定父节点查找指定树节点 if (parentId == 0) { Node node = new Node(key++, vData); getRoot().childNodes.add(node); } else { if (childNodes == null) { return; } for (Node childNode : childNodes) { if (childNode.getKey() == parentId) { Node node = new Node(key++, vData); childNode.childNodes.add(node); break; } else { add(parentId, vData, childNode.childNodes);//该节点不匹配则找该节点下的子节点继续递归查找 } } } } private boolean isExist ; public boolean isExistData(String vData, Node root) { isExist = false; return isExistData(vData , root.getChildNodes()); } private boolean isExistData(String vData, List<Node> childNodes){ if(childNodes == null){ return isExist; } for(Node node :childNodes){ if(node.getData() == vData){ return true; }else{ isExist = isExistData(vData, node.getChildNodes()); } } return isExist; } //遍历方法的重载 public void list() { this.list(this.getRoot().childNodes); } //循环Tree public void list(List<Node> list) { index++; //遍历次数,用于退出循环 if (index == key) {// return; } for (Node item : list) { System.out.println(item.getKey() + "-->" + item.getData()); if (item.childNodes.size() == 0) { continue; } else { list(item.childNodes); } System.out.println("\t"); } } public static final void main(String[] args) { Tree tree = new Tree(); tree.add(0, "1级树3"); tree.add(2, "2级树1"); tree.add(1, "2级树2"); tree.add(1, "2级树3"); tree.add(1, "2级树4"); tree.add(2, "3级树2"); tree.list(); // 搜索一棵多叉树 // 结点的值 唯一,无序 // 输入: 树的根结点 root, 指定的值target // 输出: 一个bool值,标志 指定的值target 是否在树里面 System.out.println(tree.isExistData("2级树1",tree.getRoot())); System.out.println(tree.isExistData("3级树2",tree.getRoot())); System.out.println(tree.isExistData("4级树2",tree.getRoot())); } }
参考 https://blog.csdn.net/a1396537376/article/details/100186939
标签:sys list() imp nod details 添加节点 sdn 指定 null
原文地址:https://www.cnblogs.com/hzd1096229481/p/12539136.html