java 广义表_java 输入广义表 生成二叉树 | 学步园
今天我要分享我学习用广义表生成二叉树的代码 这里我参考了 张二青博主的一些知识 http://my.csdn.net/zhangerqing
下面我进行分析了 比如输入广义表 (有关字符串的定义可以百度百科看看)String exp="A(F,B(O,J))" 然后对应的树应该是
广义表生成二叉树的规则就是:
遇到字母: 直接生产一个节点;
遇到"(": 下一步生成左孩子的操作
遇到”)“:返回上一层
遇到",": 下一步是生产右孩子的操作
代码贴出
public class BinaryTree {
/*
* 这是输入广义表 然后生产二叉树
*/
public class Node{ //节点类
private char data;
private Node lchild;
private Node rchild;
public Node(){
}
public Node(char data,Node lchild,Node rchild){
this.data=data;
this.lchild=lchild;
this.rchild=rchild;
}
public void setlchild(Node lchild) {
this.lchild = lchild;
}
public void setrchild(Node rchild) {
this.rchild=rchild;
}
public Node getRchild() {
// TODO Auto-generated method stub
return rchild;
}
public Node getLchild() {
// TODO Auto-generated method stub
return lchild;
}
public char getData() {
// TODO Auto-generated method stub
return data;
}
}
public Node creatBinaryTree(String exp){
char[] exps=exp.toCharArray();
Node[] node=new Node[4];
Node curr = null;
int j=0,top=0,type=0;
while(j
switch(exps[j]){
case '(':
node[top]=curr;
type=1;
break;
case ')':
top=top-1;
break;
case ',':
top=top-1;
type=2;
break;
default:
curr=new Node(exps[j],null,null);
switch(type){
case 1:
node[top].setlchild(curr);
top=top+1;
break;
case 2:
node[top].setrchild(curr);
top=top+1;
break;
default:
break;
}
}
j++;
}
return node[0];
}
public void PreOrder(Node node) {
if (node == null) {
return;
} else {
System.out.print(node.getData() + " ");
PreOrder(node.getLchild());
PreOrder(node.getRchild());
}
}
public void LastOrder(Node node){
if (node == null) {
return;
}
else{
LastOrder(node.getLchild());
LastOrder(node.getRchild());
System.out.print(node.getData() + " ");
}
}
public void CneterOrder(Node node){
if (node == null) {
return;
}
else{
LastOrder(node.getLchild());
System.out.print(node.getData() + " ");
LastOrder(node.getRchild());
}
}
public static void main(String[] args) {
BinaryTree tree=new BinaryTree();
System.out.println("PreOrder:");
tree.PreOrder(tree.creatBinaryTree("A(F,B(O,J))"));
System.out.println("\nLastOrder:");
tree.LastOrder(tree.creatBinaryTree("A(F,B(O,J))"));
System.out.println("\nCenterOrder:");
tree.CneterOrder(tree.creatBinaryTree("A(F,B(O,J))"));
}
}
输出:
PreOrder:
A F B O J
LastOrder:
F O J B A
CenterOrder:
F A O J B
java 广义表_java 输入广义表 生成二叉树 | 学步园相关推荐
- java校验邮箱_Java正则表达式校验邮箱和手机号 | 学步园
[html] import java.util.regex.Matcher; import java.util.regex.Pattern; public class CheckMobileAndEm ...
- birt java api_「Birt」birt api生成报表 | 学步园
public class PDFReportServiceAccess { /** */ /** 初始化的状态 */ protected static boolean initStatus = fal ...
- java 实现电子签名_java swing实现手写板电子签名系统 | 学步园
java swing实现手写板电子签名系统 支持 手写板 ,触摸屏电脑,支持压强 压感效果......................... 部分代码 MyLeftPanel.java public ...
- java printwriter用法_Java中printwriter类的用法 | 学步园
printwriter类: java.io 类 PrintWriter java.lang.Object java.io.Writer java.io.PrintWriter 所有已实现的接口: Cl ...
- java原始类型_Java的原始类型(Primitive Type) | 学步园
我们知道,在Java中,变量有两种类型,一种是原始类型,一种是引用类型. 原始类型一共有8种,它们分别是char,boolean,byte,short,int,long,float,double.在J ...
- java下发报文_java报文的发送和接收 | 学步园
/* * 发送端 */ public void send() throws Exception { System.out.println("send..............") ...
- java webapps路径_java 获取服务器端的webapps路径 | 学步园
/** * 获取服务器端的webapps路径 * @return */ public String findServerPath(){ String classPath = this.getClass ...
- java 和历_Java 儒略历和公历的换算 | 学步园
// 儒略历:113260 = 前三位(2013-1900)+后三位(2013年中的第260天) //'yyyy-MM-dd'时间格式转换为六位数字日历 public static String Da ...
- java调用存储过程sqlserver_Java调用SqlServer存储过程怎么实现 | 学步园
在使用Java开发时,经常会遇到调用SqlServer存储过程的问题.下面学步园小编来讲解下Java调用SqlServer存储过程怎么实现? Java调用SqlServer存储过程怎么实现 1.数据库 ...
最新文章
- 如何挑选深度学习 GPU?
- first day
- python做马里奥_python实现超级马里奥
- java file类包_Java中File类的常用API
- Laravel-admin hasMany表单关联提交报错字段 无详细信息错误说明
- 服务器网站访问日志分析,服务器日志分析与流量统计_直观快捷分析每个网站的日志...
- 机器学习与ML.NET–NLP与BERT
- sql读取 获取子节点 父节点
- 2021年中国大屏幕拼接系统市场趋势报告、技术动态创新及2027年市场预测
- portal认证 只能重定向80和443请求_华为防火墙内置Portal认证报文交互
- C# 概念 委托和事件
- WebService学习之三:spring+cxf整合
- 机器学习实战 - 读书笔记(05) - Logistic回归
- ubuntu记录pdf手写笔记: 数位板(硬件)+xournal(软件)
- 编译原理学习笔记 4.5 自底向上分析方法
- linux 运行魂斗罗,如何在linux/freebsd下玩模拟器游戏_linux教程
- TCP中的RST标志(Reset)详解
- 计算机管理-磁盘管理中进行扩展卷操作,Win8系统如何进行磁盘管理?
- 通知提示音修改默认铃声
- C++ 指向数组的指针
热门文章
- SAP CRM Fiori note automatic delete deletion scenario
- A small tip to explore how to call a method of a control
- 一个最简单的用SAP UI5实现的live search demo,完整代码只有55行
- 如何处理CRM_ORGMAN 300 error message
- Sales Organization with Fiscal Year
- SAP CRM BSPWDApplication.do
- Interactive Report UI - IFrame
- HelloWorldProxy is a factory bean
- 使用openSSL构造一个支持https的nodejs服务器
- 如何处理postman Self-signed SSL certificate blocked错误