package com.coding.basic;
public class BinaryTreeNode {
private Object data;
private BinaryTreeNode left;
private BinaryTreeNode right;
public Object getData() {
return data;
}
public void setData(Object 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(Object o){
if(data==null){ //�жϸ��ڵ��Ƿ�Ϊ��
data=o;
left=null;
right=null;
}
else{
int insertData=(int) o;
int nowData=(int) data;
if(left==null || right==null){ //1.left==null right==null,2.left!=null,right==null,3.left==null.right!=null
if(nowData>=insertData && left==null){ //�жϲ�����С����һ���ڵ�,left==null
left=new BinaryTreeNode();
left.data=o;
left.left=null;
left.right=null;
}
else if(insertData>nowData && right==null){ //�жϲ�����������һ���ڵ�,==null
right=new BinaryTreeNode();
right.data=o;
right.left=null;
right.right=null;
}
else{
BinaryTreeNode treeNode=null; //��¼�ȽϽڵ�
if(nowData>=insertData ){ //�����ǰ���ڵ����ݴ�������������
treeNode=left; //�ȽϽڵ�Ϊ��ڵ�
}
else{
treeNode=right; //����Ϊ�ҽڵ�
}
BinaryTreeNode tempNode=null; //��ʱ�ڵ㣬���ڼ�¼���ȽϽڵ����ڵ���ҽڵ�Ϊ��ʱ��¼�ȽϽڵ�
while(treeNode!=null){
nowData=(int) treeNode.data; //���ĵ�ǰ��ֵ
if(insertData<=nowData){ //�����ǰ���ڵ����ݴ�������������
tempNode=treeNode.left; //��ʱ�ڵ�Ϊ��ڵ�
}
else{
tempNode=treeNode.right; //����Ϊ�ҽڵ�
}
if(tempNode==null){
tempNode=treeNode; //��¼�ȽϽڵ�
if(insertData<=nowData){ //�����ǰ���ڵ����ݴ�������������
treeNode=treeNode.left; //�ȽϽڵ�Ϊ��ڵ�
}
else{
treeNode=treeNode.right; //����Ϊ�ҽڵ�
}
}
else{
treeNode=tempNode; //��ʱ�ڵ㲻Ϊ��ʱ���ȽϽڵ㸳ֵΪ��ʱ�ڵ�
}
}
if(treeNode==null){ //���ȽϽڵ�Ϊ��ʱ
treeNode=new BinaryTreeNode(); //�½�����ڵ�
treeNode.data=o;
treeNode.left=null;
treeNode.right=null;
int upData=(int) tempNode.data;
if(insertData<=upData){ //����һ���ڵ�����ݴ��ڲ���ڵ������ʱ
tempNode.left=treeNode; //��һ���ڵ����ڵ㸳�����ڵ�
}
else{
tempNode.right=treeNode;
}
}
}
}
else{ //left!=null&&right!=null
BinaryTreeNode treeNode=null; //�������ж�һ��
if(nowData>=insertData ){
treeNode=left;
}
else{
treeNode=right;
}
BinaryTreeNode tempNode=null;
while(treeNode!=null){
nowData=(int) treeNode.data;
if(insertData<=nowData){
tempNode=treeNode.left;
}
else{
tempNode=treeNode.right;
}
if(tempNode==null){
tempNode=treeNode;
if(insertData<=nowData){
treeNode=treeNode.left;
}
else{
treeNode=treeNode.right;
}
}
else{
treeNode=tempNode;
}
}
if(treeNode==null){
treeNode=new BinaryTreeNode();
treeNode.data=o;
treeNode.left=null;
treeNode.right=null;
int upData=(int) tempNode.data;
if(insertData<=upData){
tempNode.left=treeNode;
}
else{
tempNode.right=treeNode;
}
}
}
}
return this;
}
}