package com.coding.basic;
public class BinaryTreeNode<T extends BinaryTreeNode.Compare> {
private T data;
private BinaryTreeNode left;
private BinaryTreeNode right;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public BinaryTreeNode getLeft() {
return left;
}
public void setLeft(BinaryTreeNode left) {
this.left = left;
}
public BinaryTreeNode getRight() {
return right;
}
public void setRight(BinaryTreeNode right) {
this.right = right;
}
public BinaryTreeNode insert(T o) {
BinaryTreeNode node = new BinaryTreeNode();
node.setData(o);
insert(this, node);
return node;
}
private void insert(BinaryTreeNode parent, BinaryTreeNode child) {
BinaryTreeNode node;
if (child.getData().isLargeThanTarget(parent.getData())) {
// 子节点比父节点大,需要向右插入
node = getRight();
if (null == node) {
// 右节点为空则可以直接插入
parent.setRight(node);
} else {
// 递归检查右边子树的插入位置
insert(node, child);
}
} else {
// 子节点比父节点小,或者等于父节点,需要向左插入
node = getLeft();
if (null == node) {
// 左节点为空,则直接插入
parent.setLeft(node);
} else {
// 递归检查左子树的插入位置
insert(node, child);
}
}
}
public interface Compare {
boolean isLargeThanTarget(Compare target);
}
}