数据结构——简单表达式二叉树实现

本文介绍如何实现数据结构中的简单表达式二叉树。通过定义Node节点类,包含左右子节点和数据域,结合构造方法和属性访问器,构建表达式如'4+23*56/2-0'的二叉树。通过遍历字符串,存储操作符和数值,并构建节点。最后,使用递归实现中序遍历,以验证二叉树的正确性。

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

数据结构——简单表达式二叉树实现

今天我们来了解——树这种结构

树由根节点出发有若干个节点,每个节点又有若干个子节点,这样由上而下构成一个类似树根的结构

其中最具有代表性的莫过于二叉树了

今天我们来实现一个最简单的表达式二叉树

比如:4+23*56/2-0

我们先需要一个Node节点类

具有左右两个子节点属性,还有一个数据域

public class Node {
	private Node left;
	private Node right;
	private String data;
	
	public Node(String data){
		this.data=data;
	}
	public Node(String data,Node left,Node right){
		this.data=data;
		this.left=left;
		this.right=right;
	}
}

两个构造方法分别用来创建父节点和普通节点

然后分别设置属性的set,get方法即可

然后我们根据表达式来写一个二叉树类

public class BinaryTree {

	private Node root;//声明根节点
	private String s="";
}

声明两个属性一个是根节点属性,还有一个String属性

然后我们声明两个数组队列分别用来存储操作符和数值

使用一个for循环遍历字符串,然后将数值和操作符分别存储

public BinaryTree(String str){
		//存放操作符的数组队列
		ArrayList<String> oper=new ArrayList<String>();
		//存放节点数据的数组队列
		ArrayList<Node> numList=new ArrayList<Node>();
		//分离出操作符和数据,并分别存放
		for(int i=0;i<str.length();i++){
			char ch= str.charAt(i);//取出字符
			if(ch>'0'&&ch<='9'){
				s+=ch;
			}else{
				numList.add(new Node(s));
				s="";
				oper.add(ch+"");
			}
		}
		//把最后的数字加入到数字节点中
		numList.add(new Node(s));
}

 

然后我们每次取出两个数值和一个操作符用来构建节点

while(oper.size()>0){
			//取出存储的数
			Node left=numList.remove(0);
			Node right=numList.remove(0);
			String ope=oper.remove(0);
			
			Node node=new Node(ope, left, right);
			numList.add(0, node);
		}
		//最后让根节点等于第一个节点
		root=numList.get(0);

这样一个简单的表达式二叉树就建立好了,最后我们写一个方法来测试一下吧

利用递归得到中序遍历的二叉树

public void output(Node node){
		if(node.getLeft()!=null){
			output(node.getLeft());
		}
		System.out.print(node.getData());
		if(node.getRight()!=null){
			output(node.getRight());
		}
	}
public void output(){
		output(root);
}

最后将方法封装方便我们使用时调用!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值