package com.coding.basic;
public class BinaryTreeNode {
private Object data;
private BinaryTreeNode left;
private BinaryTreeNode right;
private BinaryTreeNode parent;
public BinaryTreeNode(Object data) {
this.data = data;
}
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 void setParent(BinaryTreeNode parent) {
this.parent = parent;
}
public BinaryTreeNode getParent() {
return parent;
}
public BinaryTreeNode insert(Object o) {
BinaryTreeNode newNode = new BinaryTreeNode(o);
BinaryTreeNode root = findRoot(this);
if (root.data == null) {
root.data = newNode;
} else {
int newVal = getNodeIntVal(newNode);
insert(root, newNode, newVal);
}
return newNode;
}
private void insert(BinaryTreeNode node, BinaryTreeNode newNode, int newVal) {
int nodeVal = getNodeIntVal(node);
if (newVal < nodeVal) {
if (node.left == null) {
newNode.parent = node;
node.left = newNode;
} else {
insert(node.left, newNode, newVal);
}
} else {
if (node.right == null) {
newNode.parent = node;
node.right = newNode;
} else {
insert(node.right, newNode, newVal);
}
}
}
private BinaryTreeNode findRoot(BinaryTreeNode binaryTreeNode) {
while (binaryTreeNode.parent != null) {
binaryTreeNode = binaryTreeNode.parent;
}
return binaryTreeNode;
}
private int getNodeIntVal(BinaryTreeNode node) {
if (node.data instanceof Integer) {
return ((Integer) node.data).intValue();
}
return 0;
}
public int getDataIntVal() {
if (data instanceof Integer) {
return ((Integer) data).intValue();
}
return 0;
}
}