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. 最近闲着利用QQ协议写了一个聊天器

    最近闲着,把以前一个利用QQ协议写了的聊天器找出来玩,采用的是QQ比较稳定的协议,之前听说有人用WEB协议,或是安卓版QQ协议,都不太稳定.而我这个版的已经有好几年没动了.今天找出来依旧能登陆.获取好 ...

  2. 上海高校程序设计竞赛 D CSL 的字符串 ( 贪心)

    题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. 给定一个字符串,只含有可打印字符,通过删除若干字符得到新字符串,新字符串必须满足两个条件: 原字符串中出现的字 ...

  3. 挑战程序设计竞赛 P131 区间DP

    书上好多题没补 PS.整个DP是根据Q来划分的,dalao的代码就是不一样啊 #include<bits/stdc++.h> #define rep(i,j,k) for(int i=j; ...

  4. vue 在使用v-html绑定的时候,里面的元素不会继承外部的css,解决方案

    问题 想用vue绑定父文本生成的HTML内容,但是发现CSS样式根本不生效,选择器没起作用 代码: <div class="announcedetailImg" v-html ...

  5. 最小生成树的kruskal、prim算法

    kruskal算法和prim算法 都说 kruskal是加边法,prim是加点法 这篇解释也不错:这篇 1.kruskal算法 因为是加边法,所以这个方法比较合适稀疏图.要码这个需要先懂并查集.因为我 ...

  6. vm12下Centos6安装mysql5.7

    一.下载mysql的rpm tar文件 文件名称:mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar官方地址:https://dev.mysql.com/get/Down ...

  7. 「BZOJ1924」「SDOI2010」 所驼门王的宝藏 tarjan + dp(DAG 最长路)

    「BZOJ1924」[SDOI2010] 所驼门王的宝藏 tarjan + dp(DAG 最长路) -------------------------------------------------- ...

  8. 利用wireshark和python分析网络

  9. 9 Essential Free Linux Transcoders(转码)

    需要转码的理由千万种,所幸除了硬件转码之外,Linux平台还有很多开源工具可以借鉴,如该文章所示: 原文来自:9 Essential Free Linux Transcoders(http://www ...

  10. c#输入方法名来调用方法(反射)

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...