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 }

 

posted @ 2016-08-24 11:42  华不摇曳  阅读(4897)  评论(0编辑  收藏  举报