static final int MAXLEN = 20;  //最大长度

class CBTType            //定义二叉树节点类型
{ String data; //元素数据
CBTType left; //左子树节点引用
CBTType right; //右子树节点引用
} CBTType InitTree() //初始化二叉树
{
CBTType node;
if((node=new CBTType())!=null){ //申请内存
System.out.println("请输入根节点数据");
node.data=input.next();
node.left=null;
node,right=null;
if(node!=null)
{
return node;
}
else
{
return null;
}
}
return null;
} void AddTreeNode(CBTType treeNode) //添加节点
{
CBTType pnode,parent;
String data;
int menusel; if((pnode=new CBTType())!=null)
{
System.out.println("输入二叉树结点数据");
pnode.data=input.next();
pnode.left=null;
pnode,right=null;
System.out.println("输入该节点父节点的数据");
data=input.next();
parent=TreeFindNode(treeNode,data);
if(parent==null)
{
System.out.prinln("未找到父节点");
return;
}
System.out.println("1.插入到父节点左子树 2.插入到父节点右子树");\
do
{
menusel=input.neitInt();
if(menusel==1||menusel==2)
{
if(parent==null)
{
System.out.prinln("父节点不存在,请先设置父节点");
}
else
{
switch(menusel)
{
case 1:
if(parent.left!=null)
{
System.out.prinln("左子树节点不为空");
}
else
{
parent.left=pnode;
}
break;
case 2:
if(parent.right!=null)
{
System.out.prinln("右子树节点不为空");
}
else
{
parent.right=pnode;
}
break;
default:
System.out.println("无效参数");
}
}
}while(menusel!=1&&menusel!=2); } } CBTType TreeFindNode(CBTType treeNode,String data) // 查找节点
{
CBTType ptr;
if(treeNode==null)
{
return null;
}
else
{
if(treeNode.data.equals(data))
{
return treeNode
}
else
{
if((ptr=TreeFindNode(treeNode.left,data))!==null) //递归左子树
{
return ptr;
}
else if((ptr=TreeFindNode(treeNode.right))!==null) // 递归右子树
{
return ptr;
}
else
{
return null;
}
}
}
} CBTType TreeLeftNode(CBTType treeNode) //获取左子树
{
if(treeNode!=null)
{
return treeNode.left;
}
else
{
return null;
}
} CBTType TreeRightNode(CBTType treeNode) //获取右子树
{
if(treeNode!=null)
{
return treeNode.right;
}
else
{
return null;
}
} int TreeIsEmpty(CBTType treeNode) //判断空树
{
if(treeNode==null)
{
return 1;
}
else
{
return 0;
}
} int TreeDepth(CBTType treeNode) //计算二叉树深度
{
int depleft,depright;
if(treeNode==null)
{
return 0;
}
else
{
depleft=TreeDepth(treeNode.left); //左子树深度递归
depright=TreeDepth(treeNode.right); //右子树深度递归
if(depleft>depright)
{
return depleft+1;
}
else
{
return depright+1;
}
}
} void ClearTree(CBTType treeNode) //清空二叉树
{
if(treeNode!=null)
{
ClearTree(treeNode.left);
ClearTree(treeNode.right);
treeNode=null;
}
} void TreeNodeData(CBTType p) //显示当前节点数据
{
System.out.prinln("%s",p.data);
} void LevelTree(CBTType treeNode) //层次遍历
{
CBTType p;
CBTType[] q=new CBTType[MAXLEN]; //定义队列
int head= 0;
int tail= 0;
if(treeNode!=null)
{
tail=(tail+1)%MAXLEN; //计算循环队列尾序号
q[tail]=treeNode; //将二叉树根引进队列
}
while(head!=tail) //队列不为空 进行循环
{
head=(head+1)%MAXLEN;
p=q[head];
TreeNodeData(p);
if(p.left!=null)
{
tail=(tail+1)%MAXLEN;
q[tail]=p.left;
}
if(p.right!=null)
{
tail=(tail+1)%MAXLEN;
q[tail]=p.left;
}
}
} void DLRTree(CBTType treeNode) //先序遍历
{
if(treeNode!=null)
{
TreeNodeData(treeNode); //显示节点数据
DLRTree(treeNode.left);
DLRTree(treeNode,right);
}
} void LDRTree(CBTType treeNode) //中序遍历
{
if(treeNode!=null)
{
LDRTree(treeNode.left);
TreeNodeData(treeNode);
LDRTree(treeNode,right);
}
} void LRDTree(CBTType treeNode) //后序遍历
{
if(treeNode!=null)
{
LRDTree(treeNode.left);
LRDTree(treeNode.right);
TreeNodeData(treeNode);
}
}

java 实现二叉树结构基本运算详细代码的更多相关文章

  1. Java实现队列结构的详细代码

    一.什么是队列结构 一种线性结构,具有特殊的运算法则[只能在一端(队头)删除,在另一端(队尾)插入]. 分类: 顺序队列结构 链式队列结构 基本操作: 入队列 出队列 二.准备数据 static fi ...

  2. Java实现链表结构的具体代码

    一.数据准备 1. 定义节点 2.   定义链表 1.数据部分 2.节点部分 class DATA //数据节点类型 { String key; String name; int age; } cla ...

  3. java连接oracle数据库详细代码

    详细代码: import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;imp ...

  4. Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

    http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...

  5. 基本算法思想Java实现的详细代码

    基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...

  6. java树状结构之二叉树

    参考:http://blog.csdn.net/zhangerqing/article/details/8822476 前面已经提到过树和二叉树的相关概念内容,下面主要来介绍下关于二叉树的创建,遍历, ...

  7. Java连接MySQL数据库——含详细步骤和代码

    工具:eclipse.MySQL.MySQL连接驱动:mysql-connector-java-5.1.45.jar 首先要下载Connector/J地址:http://www.mysql.com/d ...

  8. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在曾经的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本的语法 ...

随机推荐

  1. Cboard Cube 实现Top X效果

    第一步,点击度量值指标的排序. 第二步,点击[过滤]图标,选择Filter 在窗口中输入需要Top X的数字即可. 预览效果如下: 版权声明:本文为博主原创文章,需要转载请注明出处. [置顶]Cboa ...

  2. ios网络 -- HTTP请求 and 文件下载/断点下载

    一:请求 http://www.jianshu.com/p/8a90aa6bad6b 二:下载 iOS网络--『文件下载.断点下载』的实现(一):NSURLConnection http://www. ...

  3. POJ 3258:River Hopscotch (最大化最小值)

    [题意] 牛要到河对岸,在与河岸垂直的一条线上,河中有N块石头,给定河岸宽度L,以及每一块石头离牛所在河岸的距离, 现在去掉M块石头,要求去掉M块石头后,剩下的石头之间以及石头与河岸的最小距离的最大值 ...

  4. 马的移动(BFS) 详细注释 一个具有情怀的题目

    题目描述 小明很喜欢下国际象棋,一天,他拿着国际象棋中的"马"时突然想到一个问题: 给定两个棋盘上的方格a和b,马从a跳到b最少需要多少步? 现请你编程解决这个问题. 提示:国际象 ...

  5. Git的深入理解与GitHub托管服务的使用

    [转自] http://www.cnblogs.com/cocowool/archive/2012/02/17/2356125.html 源代码管理系统(SCM)与版本控制 版本控制是一种记录若干文件 ...

  6. 【实战】简述一次挖XSS的经历

    值守尤其是夜班真的是件痛苦的事情呀,献给还在值守岗位上奋斗的小伙伴们. 简单试了前面几个参数,发现c0-id这个参数值在响应包里有回显,截图如下: 把c0-id参数值改为xss,响应包内容也随之变化, ...

  7. ibatis配置文件中的XML解析错误The content of elements must consist of well-formed character data or markup.

    在检查过所有的标签名都没有问题的情况下. xml中的小于号属于非法字符. SQL语句中则可能需要小于号,此时就需要用<![CDATA[  ]]>将小于号包裹,如此不会被xml解析器解析. ...

  8. python学习12-反射 判断函数与方法(转载)

    一.三个内置函数 1.issubclass(a, b)  判断a类是否是b类的子类 class Foo: pass class Zi(Foo): pass class Sun(Zi): passpri ...

  9. (转)Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    原文:http://blog.51cto.com/freeloda/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Ng ...

  10. zookeeper 常用命令

    服务管理 启动ZK服务: zkServer.sh start 查看ZK状态: zkServer.sh status 停止ZK服务: zkServer.sh stop 重启ZK服务: zkServer. ...