java 广义表_java 输入广义表 生成二叉树 | 学步园

本文介绍了如何使用Java将广义表转换为二叉树,通过解析广义表字符串如""A(F,B(O,J))"",遵循特定的规则创建二叉树节点。文章提供了一个名为BinaryTree的类,包含了节点类Node和广义表转二叉树的函数creatBinaryTree,以及三种遍历二叉树的方法:前序遍历、后序遍历和中序遍历。最后展示了代码运行的输出结果。" 111338416,9549694,网易区块链技术赋能数字身份认证新应用,"['区块链', '数字身份', 'NFT', '隐私保护', '身份认证']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我要分享我学习用广义表生成二叉树的代码 这里我参考了  张二青博主的一些知识 http://my.youkuaiyun.com/zhangerqing

下面我进行分析了  比如输入广义表  (有关字符串的定义可以百度百科看看)String exp="A(F,B(O,J))" 然后对应的树应该是

cec2e0df228e826e12b5d1d48460d201.png

广义表生成二叉树的规则就是:

遇到字母: 直接生产一个节点;

遇到"(": 下一步生成左孩子的操作

遇到”)“:返回上一层

遇到",":  下一步是生产右孩子的操作

代码贴出

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值