二叉搜索树的java实现

本文介绍了一种二叉搜索树的数据结构实现方法,包括插入、删除、查找等基本操作,并提供了完整的Java代码示例。

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




public class BinarySearchTree<T extends Comparable> {

private static class Entity<T extends Comparable> {
private T node = null;
private Entity<T> parent = null;
private Entity<T> left = null;
private Entity<T> right = null;

public T getNode() {
return node;
}
public void setNode(T node) {
this.node = node;
}
public Entity<T> getParent() {
return parent;
}
public void setParent(Entity<T> parent) {
this.parent = parent;
}
public Entity<T> getLeft() {
return left;
}
public void setLeft(Entity<T> left) {
this.left = left;
}
public Entity<T> getRight() {
return right;
}
public void setRight(Entity<T> right) {
this.right = right;
}
}

private Entity<T> head = null;

public void append(T node) {
Entity<T> entity = new Entity<T>();
entity.setNode(node);
if(head == null) {
head = entity;
} else {
Entity<T> pointer = head;
while(pointer != null) {
if(pointer.getNode().compareTo(entity.getNode()) > 0) {
if(pointer.getLeft() == null) {
pointer.setLeft(entity);
entity.setParent(pointer);

break;
}

pointer = pointer.getLeft();
} else{
if(pointer.getRight() == null) {
pointer.setRight(entity);
entity.setParent(pointer);

break;
}

pointer = pointer.getRight();
}
}
}
}

public boolean remove(T node) {
if(head == null) return false;

Entity<T> pointer = head;
while(pointer != null) {
if(pointer.getNode().compareTo(node) > 0) {
pointer = pointer.getLeft();
} else if(pointer.getNode().compareTo(node) < 0) {
pointer = pointer.getRight();
} else {
removeNode(pointer);
return true;
}
}

return false;
}

private void removeNode(Entity<T> pointer) {
Entity<T> cursor = pointer;

while(true) {
if(cursor.getLeft() != null) {
cursor = cursor.getLeft();
} else if (cursor.getRight() != null) {
cursor = cursor.getRight();
} else {
break;
}
}

Entity<T> parent = cursor.getParent();
if(parent.getNode().compareTo(cursor.getNode()) > 0) {
parent.setLeft(null);
} else {
parent.setRight(null);
}

cursor.setParent(null);

pointer.setNode(cursor.getNode());

rebuild(pointer);
}

private void rebuild(Entity<T> pointer) {
if(pointer != null) {
if(pointer.getLeft() != null) {
if(pointer.getNode().compareTo(pointer.getLeft().getNode()) < 0) {
T node = pointer.getNode();

pointer.setNode(pointer.getLeft().getNode());

pointer.getLeft().setNode(node);
}
}

if(pointer.getRight() != null) {
if(pointer.getNode().compareTo(pointer.getRight().getNode()) > 0) {
T node = pointer.getNode();

pointer.setNode(pointer.getRight().getNode());

pointer.getLeft().setNode(node);
}
}

if(pointer.getLeft() != null) {
rebuild(pointer.getLeft());
}

if(pointer.getRight() != null) {
rebuild(pointer.getRight());
}
}
}

public void print() {
treeWalk(head);
System.out.println();
}

private void treeWalk(Entity<T> entity) {
if(entity != null) {
treeWalk(entity.getLeft());
System.out.print(entity.getNode() + " ");
treeWalk(entity.getRight());
}
}

public T search(T node) {
T result = binarySearch(head, node);

return result;
}

public T search2(T node) {
Entity<T> top = head;

while(top != null) {
if(node.equals(top.getNode())) {
return top.getNode();
}

if(node.compareTo(top.getNode()) > 0) {
top = top.getRight();
} else {
top = top.getLeft();
}
}

return null;
}

public T maximun() {
Entity<T> top = head;
while(top.getRight() != null) {
top = top.getRight();
}

return top.getNode();
}

public T minimum() {
Entity<T> top = head;
while(top.getLeft() != null) {
top = top.getLeft();
}

return top.getNode();
}

private T binarySearch(Entity<T> top, T node) {
if(top == null) return null;

if(node.equals(top.getNode())) {
return top.getNode();
}
if(node.compareTo(top.getNode()) > 0) {
return binarySearch(top.getRight(), node);
} else {
return binarySearch(top.getLeft(), node);
}
}

public static void main(String[] args) {
BinarySearchTree<Integer> tree = new BinarySearchTree<Integer>();

tree.append(10);
tree.append(5);
tree.append(13);
tree.append(6);
tree.append(4);
tree.append(18);
tree.append(11);
tree.append(9);
tree.append(16);
tree.append(7);
tree.append(2);

tree.print();

tree.remove(5);
tree.remove(18);

tree.print();

System.out.println(tree.search(18));
}

}


内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值