今天我要分享我学习用广义表生成二叉树的代码 这里我参考了  张二青博主的一些知识 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 输入广义表 生成二叉树 | 学步园相关推荐

  1. java校验邮箱_Java正则表达式校验邮箱和手机号 | 学步园

    [html] import java.util.regex.Matcher; import java.util.regex.Pattern; public class CheckMobileAndEm ...

  2. birt java api_「Birt」birt api生成报表 | 学步园

    public class PDFReportServiceAccess { /** */ /** 初始化的状态 */ protected static boolean initStatus = fal ...

  3. java 实现电子签名_java swing实现手写板电子签名系统 | 学步园

    java swing实现手写板电子签名系统 支持 手写板 ,触摸屏电脑,支持压强 压感效果......................... 部分代码  MyLeftPanel.java public ...

  4. java printwriter用法_Java中printwriter类的用法 | 学步园

    printwriter类: java.io 类 PrintWriter java.lang.Object java.io.Writer java.io.PrintWriter 所有已实现的接口: Cl ...

  5. java原始类型_Java的原始类型(Primitive Type) | 学步园

    我们知道,在Java中,变量有两种类型,一种是原始类型,一种是引用类型. 原始类型一共有8种,它们分别是char,boolean,byte,short,int,long,float,double.在J ...

  6. java下发报文_java报文的发送和接收 | 学步园

    /* * 发送端 */ public void send() throws Exception { System.out.println("send..............") ...

  7. java webapps路径_java 获取服务器端的webapps路径 | 学步园

    /** * 获取服务器端的webapps路径 * @return */ public String findServerPath(){ String classPath = this.getClass ...

  8. java 和历_Java 儒略历和公历的换算 | 学步园

    // 儒略历:113260 = 前三位(2013-1900)+后三位(2013年中的第260天) //'yyyy-MM-dd'时间格式转换为六位数字日历 public static String Da ...

  9. java调用存储过程sqlserver_Java调用SqlServer存储过程怎么实现 | 学步园

    在使用Java开发时,经常会遇到调用SqlServer存储过程的问题.下面学步园小编来讲解下Java调用SqlServer存储过程怎么实现? Java调用SqlServer存储过程怎么实现 1.数据库 ...

最新文章

  1. 如何挑选深度学习 GPU?
  2. first day
  3. python做马里奥_python实现超级马里奥
  4. java file类包_Java中File类的常用API
  5. Laravel-admin hasMany表单关联提交报错字段 无详细信息错误说明
  6. 服务器网站访问日志分析,服务器日志分析与流量统计_直观快捷分析每个网站的日志...
  7. 机器学习与ML.NET–NLP与BERT
  8. sql读取 获取子节点 父节点
  9. 2021年中国大屏幕拼接系统市场趋势报告、技术动态创新及2027年市场预测
  10. portal认证 只能重定向80和443请求_华为防火墙内置Portal认证报文交互
  11. C# 概念 委托和事件
  12. WebService学习之三:spring+cxf整合
  13. 机器学习实战 - 读书笔记(05) - Logistic回归
  14. ubuntu记录pdf手写笔记: 数位板(硬件)+xournal(软件)
  15. 编译原理学习笔记 4.5 自底向上分析方法
  16. linux 运行魂斗罗,如何在linux/freebsd下玩模拟器游戏_linux教程
  17. TCP中的RST标志(Reset)详解
  18. 计算机管理-磁盘管理中进行扩展卷操作,Win8系统如何进行磁盘管理?
  19. 通知提示音修改默认铃声
  20. C++ 指向数组的指针

热门文章

  1. SAP CRM Fiori note automatic delete deletion scenario
  2. A small tip to explore how to call a method of a control
  3. 一个最简单的用SAP UI5实现的live search demo,完整代码只有55行
  4. 如何处理CRM_ORGMAN 300 error message
  5. Sales Organization with Fiscal Year
  6. SAP CRM BSPWDApplication.do
  7. Interactive Report UI - IFrame
  8. HelloWorldProxy is a factory bean
  9. 使用openSSL构造一个支持https的nodejs服务器
  10. 如何处理postman Self-signed SSL certificate blocked错误