二叉排序树的增删改操作(修改删除)

树节点

public class BinaryTreeNode {
	String name, value;
	BinaryTreeNode parent, right, left;

	public BinaryTreeNode(BinaryTreeNode parent, BinaryTreeNode right,
			BinaryTreeNode left, String name, String value) {
		this.parent = parent;
		this.right = right;
		this.left = left;
		this.name = name;
		this.value = value;
	}
}



操作树

import java.util.ArrayList;
import java.util.List;

public class BinaryTree {
	private BinaryTreeNode root;

	public List<String> res = new ArrayList<String>();

	public void add(StudentBean bean) {
		root = insert(bean, root, null);
	}

	public void remove(StudentBean bean) {
		BinaryTreeNode node = getNode(bean, root);
		if (node == null) {
			return;
		}
		// 左右子树为空
		if (node.left == null && node.right == null) {
			if (node == root) {
				root = null;
			} else {
				if (node.parent.left == node) {
					node.parent.left = null;
				} else {
					node.parent.right = null;
				}
			}
		} else if (node.left == null && node.right != null) {
			if (node == root) {
				root = node.right;
			} else {
				if (node.parent.left == node) {
					node.parent.left = node.right;
				} else {
					node.parent.right = node.right;
				}
			}
		} else if (node.left != null && node.right == null) {
			if (node == root) {
				root = node.left;
			} else {
				if (node.parent.left == node) {
					node.parent.left = node.left;
				} else {
					node.parent.right = node.left;
				}
			}
		} else {
			BinaryTreeNode leftMaxNode = node.left;
			while (leftMaxNode.right != null) {
				leftMaxNode = leftMaxNode.right;
			}
			leftMaxNode.parent.right = null;
			leftMaxNode.parent = node.parent;
			if (node.parent.left == node) {
				node.parent.left = leftMaxNode;
			} else {
				node.parent.right = leftMaxNode;
			}
			leftMaxNode.left = node.left;
			leftMaxNode.right = node.right;
		}
		node = null;
	}

	public void update(StudentBean bean) {
		BinaryTreeNode node = getNode(bean, root);
		if (node != null) {
			node.value = bean.getsClass();
		}
	}

	public List<String> printTree() {
		res.clear();
		inOrder(root);
		return res;
	}

	private BinaryTreeNode inOrder(BinaryTreeNode node) {
		if (node != null) {
			inOrder(node.left);
			// System.out.println("name=" + node.name + ", class=" +
			// node.value);
			res.add("name=" + node.name + ", class=" + node.value);
			inOrder(node.right);
		}
		return node;
	}

	private BinaryTreeNode insert(StudentBean bean, BinaryTreeNode node,
			BinaryTreeNode parent) {
		if (node == null) {
			node = new BinaryTreeNode(parent, null, null, bean.getsName(),
					bean.getsClass());
		} else {
			int greater = bean.getsName().compareTo(node.name);
			if (greater < 0) {
				node.left = insert(bean, node.left, node);
			} else if (greater > 0) {
				node.right = insert(bean, node.right, node);
			}
		}
		return node;
	}

	private BinaryTreeNode getNode(StudentBean bean, BinaryTreeNode tree) {
		BinaryTreeNode node = tree;
		while (node != null) {
			int greater = bean.getsName().compareTo(node.name);
			if (greater < 0) {
				node = node.left;
			} else if (greater > 0) {
				node = node.right;
			} else {
				return node;
			}
		}
		return null;
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值