java实现多叉树查找
- 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;
- }
- }
java实现多叉树查找的更多相关文章
- Java中常用的查找算法——顺序查找和二分查找
Java中常用的查找算法——顺序查找和二分查找 神话丿小王子的博客 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位 ...
- Java学习之二分查找算法
好久没写算法了.只记得递归方法..结果测试下爆栈了. 思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的. 自己 ...
- Java进阶(三十九)Java集合类的排序,查找,替换操作
Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...
- Java实现的二分查找算法
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...
- Java基础(50):二分法查找的非递归实现和递归实现(完整代码可运行,参考VisualGO理解更佳)
一.概念 二分查找算法也称折半查找,是一种在有序数组中查找某一特定元素的搜索算法. 二.算法思想 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束:如果某一特定元素大于或者 ...
- java 正则表达式例子, 查找字符串
import java.util.regex.Matcher;import java.util.regex.Pattern; public class Main { public static voi ...
- Java连接数据库完整代码 查找和插入
package test; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; ...
- Java网络编程之查找Internet地址
一.概述 连接到Internet上计算机都有一个称为Internet地址或IP地址的唯一的数来标识.由于IP很难记住,人们设计了域名系统(DNS),DNS可以将人们可以记忆的主机名与计算机可以记忆的I ...
- java数组回顾---线性查找最大值最小值---二分查找
import java.util.Scanner; public class ArrayDemo { public static void main(String []args) { //------ ...
随机推荐
- Java经典案例之-判断质数(素数)
/** * 描述:任意输入两个数n,m(n<m)判断n-m之间有多少个素数,并输出所有素数. * 分析:素数即质数,除1和本身之外,不能被其他自然数整除的数. * 判断素数的方法为:用一个数分别 ...
- Delphi的时间与字符串函数代码示例
[delphi] view plaincopyprint? SysUtils.StrToDate(); SysUtils.StrToDateDef(); SysUtils.TryStrToDate() ...
- delphi字符串操作函数一览
首部 function SameText(const S1, S2: string): Boolean; $[SysUtils.pas 功能 返回两个字符串是否相等 说明 不区分大小写 参考 < ...
- 多线程和多进程的区别(C++)
很想写点关于多进程和多线程的东西,我确实很爱他们.但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手. 今天终于下了决心,写点东西,以后可以再修修补补也无妨. 一.为何需要多进程(或者 ...
- Flex4 布局 元素index
Flex4 布局 元素index <?xml version="1.0" encoding="utf-8"?> <s:Application ...
- 安装使用GYP,并编译libpomelo2
1.然后是下载GYP,它是由 Chromium 团队开发的跨平台自动化项目构建工具,安装后可以使用其构建出libpomelo的vs工程项目,再而进行编译,这步先下载,地址: http://code.g ...
- win7下安装sdks
原文及更多内容:http://yysource.sourceforge.net/?p=103 下载和安装 Windows 调试工具 http://msdn.microsoft.com/zh-CN/wi ...
- 不要怂,就是GAN (生成式对抗网络) (四):训练和测试 GAN
在 /home/your_name/TensorFlow/DCGAN/ 下新建文件 train.py,同时新建文件夹 logs 和文件夹 samples,前者用来保存训练过程中的日志和模型,后者用来保 ...
- json-lib之复杂数据类型的转换
在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名.年龄等 public class Student{ private String sname; privat ...
- “权限系统_基于HUI”的简单介绍和交流
昂,最近比较闲,写了个权限系统. 后端框架还是老样子,基于本人自己搭建的后台基础开发框架"Spring_Mvc_EF":前端框架,我挑选了一阵子,最后选用了HUI前端开发框架,因为 ...