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 }
时间: 2024-10-12 22:16:06

java实现多叉树查找的相关文章

Java中常用的查找算法——顺序查找和二分查找

Java中常用的查找算法——顺序查找和二分查找 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位. b) 图例说明: 原始数据:int[] a={4,6,2,8,1,9,0,3}; 要查找数字:8 代码演示: import java.util.Scanner; /* * 顺序查找 */ public class SequelSearch { public static void main(String[] arg

Java数据结构 遍历 排序 查找 算法实现

1. 遍历算法(遍历二叉树6种方法) 1.1. 概述 遍历算法针对二叉树而言的,主要有先序.中序.后序三种遍历顺序,三种顺序又分别有递归和常规算法,二叉树遍历的主要思想是:遍历左子树,遍历右子树,访问根节点,由这三者的遍历顺序来确定是先序.中序还是后序.下面只要求掌握递归遍历算法,常规遍历算法见附录一. 1.2. 先序遍历算法 遍历顺序:访问根节点,遍历左子树,遍历右子树.代码如下: void preOrder(BinaryTreeNode bt) { if (bt == null)// 如果当

Java中的二分法查找算法

[ 什么是二分查找 ]  二分查找又称为折半查找,该算法的思想是将数列按序排列,采用跳跃式方法进行查找,即先以有序数列的中点位置为比较对象, 如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分.以此类推不断缩小搜索范围. [ 二分查找的条件 ] 二分查找的先决条件是查找的数列必须是有序的. [ 二分查找的优缺点 ] 优点:比较次数少,查找速度快,平均性能好: 缺点:要求待查数列为有序,且插入删除困难: 适用场景:不经常变动而查找频繁的有序列表. [ 算法步骤描述 ] ①

Java学习之二分查找算法

好久没写算法了.只记得递归方法..结果测试下爆栈了. 思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的. 自己写的代码: 1 package com.gh; 2 3 import java.util.Arrays; 4 /** 5 * 二分查找算法实现 6 * @author ganhang 7 * 8 */ 9 public class Search { 10 public static void mai

java之字符串中查找字串的常见方法

1.int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引.      int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引. 函数数名:indexOf 调用方式:Object(String).indexOf(String str,int startIndex)或String.indexOf(String str) 参数说明:str需要查找的字串. startI

【转载】Java集合类的排序,查找,替换操作

转自:http://blog.csdn.net/sunhuaqiang1/article/details/52142873 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对象后,我们可以根据Collection中的方法进行排序,查找,替换操作.而不用在东奔西走的利用什么各种排序算法.正则来实现了.在进行数组排序时,有时反而会因为参数问题而大费周折.例如,自己在利用快排进行数组排序时,当将参数(int []

java 文件读写,查找文件部署的位置

PathUtil.getClasspathFile("test.txt")  //这样就可以查找 import java.io.File;import java.io.IOException;import java.io.InputStream;import java.net.URL; public enum PathUtil {    INSTANCE;    private static String webRootPath; /**     * 指定类的编译路径     * @p

java数组回顾---线性查找最大值最小值---二分查找

import java.util.Scanner; public class ArrayDemo { public static void main(String []args) { //------------------------------------------------------- //线性查找 int [] num ={10,20,30,40,50}; Scanner input1 = new Scanner(System.in); System.out.println("请输

Java连载71-二分查找和Arrays工具类

一.二分法查找 1.二分法查找是建立在已经排序的基础之上的 2.程序分析是从下到大?排序. 3.这个数组中没有重复的元素?. package com.bjpowernode.java_learning; ? public class D71_1_ { public static void main(String[] args) { int[] a1 = {1,5,8,9,11,25,45,55}; int destElement = 29; int index = binarySearch(a1