java实现多叉树查找
1 package tree; 2 3 import java.util.List; 4 import java.util.ArrayList; 5 import java.io.Serializable; 6 7 public class TreeNode implements Serializable { 8 private int parentId; 9 private int selfId; 10 protected String nodeName; 11 protected Object obj; 12 protected TreeNode parentNode; 13 protected List<TreeNode> childList; 14 15 public TreeNode() { 16 initChildList(); 17 } 18 19 public TreeNode(TreeNode parentNode) { 20 this.getParentNode(); 21 initChildList(); 22 } 23 24 public boolean isLeaf() { 25 if (childList == null) { 26 return true; 27 } else { 28 if (childList.isEmpty()) { 29 return true; 30 } else { 31 return false; 32 } 33 } 34 } 35 36 /* 插入一个child节点到当前节点中 */ 37 public void addChildNode(TreeNode treeNode) { 38 initChildList(); 39 childList.add(treeNode); 40 } 41 42 public void initChildList() { 43 if (childList == null) 44 childList = new ArrayList<TreeNode>(); 45 } 46 47 public boolean isValidTree() { 48 return true; 49 } 50 51 /* 返回当前节点的父辈节点集合 */ 52 public List<TreeNode> getElders() { 53 List<TreeNode> elderList = new ArrayList<TreeNode>(); 54 TreeNode parentNode = this.getParentNode(); 55 if (parentNode == null) { 56 return elderList; 57 } else { 58 elderList.add(parentNode); 59 elderList.addAll(parentNode.getElders()); 60 return elderList; 61 } 62 } 63 64 /* 返回当前节点的晚辈集合 */ 65 public List<TreeNode> getJuniors() { 66 List<TreeNode> juniorList = new ArrayList<TreeNode>(); 67 List<TreeNode> childList = this.getChildList(); 68 if (childList == null) { 69 return juniorList; 70 } else { 71 int childNumber = childList.size(); 72 for (int i = 0; i < childNumber; i++) { 73 TreeNode junior = childList.get(i); 74 juniorList.add(junior); 75 juniorList.addAll(junior.getJuniors()); 76 } 77 return juniorList; 78 } 79 } 80 81 /* 返回当前节点的孩子集合 */ 82 public List<TreeNode> getChildList() { 83 return childList; 84 } 85 86 /* 删除节点和它下面的晚辈 */ 87 public void deleteNode() { 88 TreeNode parentNode = this.getParentNode(); 89 int id = this.getSelfId(); 90 91 if (parentNode != null) { 92 parentNode.deleteChildNode(id); 93 } 94 } 95 96 /* 删除当前节点的某个子节点 */ 97 public void deleteChildNode(int childId) { 98 List<TreeNode> childList = this.getChildList(); 99 int childNumber = childList.size(); 100 for (int i = 0; i < childNumber; i++) { 101 TreeNode child = childList.get(i); 102 if (child.getSelfId() == childId) { 103 childList.remove(i); 104 return; 105 } 106 } 107 } 108 109 /* 动态的插入一个新的节点到当前树中 */ 110 public boolean insertJuniorNode(TreeNode treeNode) { 111 int juniorParentId = treeNode.getParentId(); 112 if (this.parentId == juniorParentId) { 113 addChildNode(treeNode); 114 return true; 115 } else { 116 List<TreeNode> childList = this.getChildList(); 117 int childNumber = childList.size(); 118 boolean insertFlag; 119 120 for (int i = 0; i < childNumber; i++) { 121 TreeNode childNode = childList.get(i); 122 insertFlag = childNode.insertJuniorNode(treeNode); 123 if (insertFlag == true) 124 return true; 125 } 126 return false; 127 } 128 } 129 130 /* 找到一颗树中某个节点 */ 131 public TreeNode findTreeNodeById(int id) { 132 if (this.selfId == id) 133 return this; 134 if (childList.isEmpty() || childList == null) { 135 return null; 136 } else { 137 int childNumber = childList.size(); 138 for (int i = 0; i < childNumber; i++) { 139 TreeNode child = childList.get(i); 140 TreeNode resultNode = child.findTreeNodeById(id); 141 if (resultNode != null) { 142 return resultNode; 143 } 144 } 145 return null; 146 } 147 } 148 149 /* 遍历一棵树,层次遍历 */ 150 public void traverse() { 151 if (selfId < 0) 152 return; 153 print(this.selfId); 154 if (childList == null || childList.isEmpty()) 155 return; 156 int childNumber = childList.size(); 157 for (int i = 0; i < childNumber; i++) { 158 TreeNode child = childList.get(i); 159 child.traverse(); 160 } 161 } 162 163 public void print(String content) { 164 System.out.println(content); 165 } 166 167 public void print(int content) { 168 System.out.println(String.valueOf(content)); 169 } 170 171 public void setChildList(List<TreeNode> childList) { 172 this.childList = childList; 173 } 174 175 public int getParentId() { 176 return parentId; 177 } 178 179 public void setParentId(int parentId) { 180 this.parentId = parentId; 181 } 182 183 public int getSelfId() { 184 return selfId; 185 } 186 187 public void setSelfId(int selfId) { 188 this.selfId = selfId; 189 } 190 191 public TreeNode getParentNode() { 192 return parentNode; 193 } 194 195 public void setParentNode(TreeNode parentNode) { 196 this.parentNode = parentNode; 197 } 198 199 public String getNodeName() { 200 return nodeName; 201 } 202 203 public void setNodeName(String nodeName) { 204 this.nodeName = nodeName; 205 } 206 207 public Object getObj() { 208 return obj; 209 } 210 211 public void setObj(Object obj) { 212 this.obj = obj; 213 } 214 }
心有猛虎,细嗅蔷薇 转载请注明:https://www.cnblogs.com/ygh1229/