基于二叉查找树的符号表(java)

本文介绍了一种使用二叉查找树实现有序符号表的方法。通过递归方式实现节点的插入、查找等操作,并维护每个节点的子树节点计数。

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

package BST;

public class BST<Key extends Comparable<Key>,Value> {
	private Node root;              //二叉查找树的根节点
	
	private class Node{
		private Key key;            //键
		private Value val;			//值
		private Node left,right;	//指向子树的链接
		private int N;				//以该节点为根的子树中的节点总数
		
		public Node(Key key, Value val,int N) {
			this.key=key; 
			this.val=val;
			this.N=N;
		}
	}
	
	public int size() {
		return size(root);
	}
	
	private int size(Node x) {
		if(x==null)
			return 0;
		else
			return x.N;
	}
	
	public Value get(Key key) {
		return get(root,key);
	}
	
	private Value get(Node x,Key key) {
		//在以x为根节点的子树中查找并返回key所对应的值
		//如果找不到则返回null
		if(x==null)
			return null;
		int cmp=key.compareTo(x.key);
		if(cmp<0)
			return get(x.left,key);
		else if(cmp>0)
			return get(x.right,key);
		else 
			return x.val;
	}
	
	public void put(Key key,Value val) {
		//查找key,找到则更新它的值,否则为它创建一个新的节点
		root=put(root,key,val);
	}
	
	private Node put(Node x,Key key,Value val) {
		//如果key存在于以x为根节点的子树中则更新它的值
		//否则将以key和val为键值对的新结点插入到该子树中
		if(x==null)
			return new Node(key,val,1);
		int cmp=key.compareTo(x.key);
		if(cmp<0)
			x.left=put(x.left,key,val);
		else if(cmp>0)
			x.right=put(x.left,key,val);
		else 
			x.val=val;
		x.N=size(x.left)+size(x.right)+1;
		return x;
	}
	
}

该段代码用二叉查找树实现了有序符号表的API,树由Node对象组成,每个对象都含有两条链接和一个结点计数器N。每隔Node对象都是一颗含有N个节点的子树的根节点,它的左链接指向一棵由小于该节点的所有键组成的二叉查找树,右链接指向一棵由大于该节点的所有键组成的二叉查找树。root变量指向二叉查找树的根节点Node对象(这棵树包含了符号表中的所有键值对)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值