- package tree;
- import java.util.List;
- import java.util.ArrayList;
- import java.io.Serializable;
- public class TreeNode implements Serializable {
- private int parentId;
- private int selfId;
- protected String nodeName;
- protected Object obj;
- protected TreeNode parentNode;
- protected List<TreeNode> childList;
- public TreeNode() {
- initChildList();
- }
- public TreeNode(TreeNode parentNode) {
- this.getParentNode();
- initChildList();
- }
- public boolean isLeaf() {
- if (childList == null) {
- return true;
- } else {
- if (childList.isEmpty()) {
- return true;
- } else {
- return false;
- }
- }
- }
- /* 插入一个child节点到当前节点中 */
- public void addChildNode(TreeNode treeNode) {
- initChildList();
- childList.add(treeNode);
- }
- public void initChildList() {
- if (childList == null)
- childList = new ArrayList<TreeNode>();
- }
- public boolean isValidTree() {
- return true;
- }
- /* 返回当前节点的父辈节点集合 */
- public List<TreeNode> getElders() {
- List<TreeNode> elderList = new ArrayList<TreeNode>();
- TreeNode parentNode = this.getParentNode();
- if (parentNode == null) {
- return elderList;
- } else {
- elderList.add(parentNode);
- elderList.addAll(parentNode.getElders());
- return elderList;
- }
- }
- /* 返回当前节点的晚辈集合 */
- public List<TreeNode> getJuniors() {
- List<TreeNode> juniorList = new ArrayList<TreeNode>();
- List<TreeNode> childList = this.getChildList();
- if (childList == null) {
- return juniorList;
- } else {
- int childNumber = childList.size();
- for (int i = 0; i < childNumber; i++) {
- TreeNode junior = childList.get(i);
- juniorList.add(junior);
- juniorList.addAll(junior.getJuniors());
- }
- return juniorList;
- }
- }
- /* 返回当前节点的孩子集合 */
- public List<TreeNode> getChildList() {
- return childList;
- }
- /* 删除节点和它下面的晚辈 */
- public void deleteNode() {
- TreeNode parentNode = this.getParentNode();
- int id = this.getSelfId();
- if (parentNode != null) {
- parentNode.deleteChildNode(id);
- }
- }
- /* 删除当前节点的某个子节点 */
- public void deleteChildNode(int childId) {
- List<TreeNode> childList = this.getChildList();
- int childNumber = childList.size();
- for (int i = 0; i < childNumber; i++) {
- TreeNode child = childList.get(i);
- if (child.getSelfId() == childId) {
- childList.remove(i);
- return;
- }
- }
- }
- /* 动态的插入一个新的节点到当前树中 */
- public boolean insertJuniorNode(TreeNode treeNode) {
- int juniorParentId = treeNode.getParentId();
- if (this.parentId == juniorParentId) {
- addChildNode(treeNode);
- return true;
- } else {
- List<TreeNode> childList = this.getChildList();
- int childNumber = childList.size();
- boolean insertFlag;
- for (int i = 0; i < childNumber; i++) {
- TreeNode childNode = childList.get(i);
- insertFlag = childNode.insertJuniorNode(treeNode);
- if (insertFlag == true)
- return true;
- }
- return false;
- }
- }
- /* 找到一颗树中某个节点 */
- public TreeNode findTreeNodeById(int id) {
- if (this.selfId == id)
- return this;
- if (childList.isEmpty() || childList == null) {
- return null;
- } else {
- int childNumber = childList.size();
- for (int i = 0; i < childNumber; i++) {
- TreeNode child = childList.get(i);
- TreeNode resultNode = child.findTreeNodeById(id);
- if (resultNode != null) {
- return resultNode;
- }
- }
- return null;
- }
- }
- /* 遍历一棵树,层次遍历 */
- public void traverse() {
- if (selfId < 0)
- return;
- print(this.selfId);
- if (childList == null || childList.isEmpty())
- return;
- int childNumber = childList.size();
- for (int i = 0; i < childNumber; i++) {
- TreeNode child = childList.get(i);
- child.traverse();
- }
- }
- public void print(String content) {
- System.out.println(content);
- }
- public void print(int content) {
- System.out.println(String.valueOf(content));
- }
- public void setChildList(List<TreeNode> childList) {
- this.childList = childList;
- }
- public int getParentId() {
- return parentId;
- }
- public void setParentId(int parentId) {
- this.parentId = parentId;
- }
- public int getSelfId() {
- return selfId;
- }
- public void setSelfId(int selfId) {
- this.selfId = selfId;
- }
- public TreeNode getParentNode() {
- return parentNode;
- }
- public void setParentNode(TreeNode parentNode) {
- this.parentNode = parentNode;
- }
- public String getNodeName() {
- return nodeName;
- }
- public void setNodeName(String nodeName) {
- this.nodeName = nodeName;
- }
- public Object getObj() {
- return obj;
- }
- public void setObj(Object obj) {
- this.obj = obj;
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/2511201514089.html
来源: http://www.codesnippet.cn/detail/2511201514089.html