package com.coding.mybasic;
public class BinaryTreeNode {
private Integer data;
private BinaryTreeNode left;
private BinaryTreeNode right;
public Object getData() {
return data;
}
public void setData(Integer 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(Integer o){
if(o == null){
throw new RuntimeException("不能插入空值");
}
BinaryTreeNode searchNode = search(this,o);
if(isExistData(searchNode,o)){
throw new RuntimeException("该值已存在 无法插入");
}
if(searchNode != null){
BinaryTreeNode binaryTreeNode = new BinaryTreeNode();
binaryTreeNode.setData(o);
if(searchNode.data.intValue() > o.intValue()){
searchNode.setLeft(binaryTreeNode);
}else{
searchNode.setRight(binaryTreeNode);
}
} else {
throw new RuntimeException("根节点未赋值,无法插入");
}
return this;
}
private boolean isExistData(BinaryTreeNode searchNode,Integer data) {
return searchNode != null && searchNode.data.intValue() == data.intValue();
}
private BinaryTreeNode search(BinaryTreeNode binaryTreeNode, Integer data) {
if(binaryTreeNode == null || binaryTreeNode.data == null){
return null;
}
Integer curNodeData = binaryTreeNode.data;
if(curNodeData.intValue() > data.intValue()){// 左 curNodeData > data
if(binaryTreeNode.left != null){
return search(binaryTreeNode.left,data);
}
}else if(curNodeData.intValue() < data.intValue()){
if(binaryTreeNode.right != null){
return search(binaryTreeNode.right,data);
}
}
return binaryTreeNode;
}
}