package com.github.chaoswang.learning.java.collection.myown; /** * �����������Binary Search Tree�������֣���������������������������������һ�ÿ����� * �����Ǿ����������ʵĶ������� ���������������գ��������������н���ֵ��С�����ĸ�����ֵ�� * ���������������գ��������������н���ֵ���������ĸ�����ֵ�� ������������Ҳ�ֱ�Ϊ������������ */ public class MyBinarySearchTree { private TreeNode root; public MyBinarySearchTree(Comparable obj){ this.root = new TreeNode(obj); } public boolean insert(Comparable obj){ return insert(root, obj); } private boolean insert(TreeNode parent, Comparable obj){ //����Ѿ����ڸ�treenode���򷵻�false if((parent.getUserObject().equals(obj))){ return false; } if(parent.getUserObject().compareTo(obj) > 0){ //�����ڸ�treenode���Ҳ���ɹ����򷵻�true if(parent.getLeftChild() == null){ TreeNode node = new TreeNode(obj); node.setParent(parent); parent.setLeftChild(node); return true; } return insert(parent.getLeftChild(), obj); } if(parent.getRightChild() == null){ TreeNode node = new TreeNode(obj); node.setParent(parent); parent.setRightChild(node); return true; } return insert(parent.getRightChild(), obj); } @Override public String toString() { if(root == null){ return ""; } return root.toString(); } private static class TreeNode { private TreeNode parent; private TreeNode leftChild; private TreeNode rightChild; private Comparable userObject;//�ڵ㶼�������洢���ݵ� public TreeNode(Comparable userObject){ this.userObject = userObject; } public Comparable getUserObject() { return userObject; } public TreeNode getParent() { return parent; } public void setParent(TreeNode parent) { this.parent = parent; } public TreeNode getLeftChild() { return leftChild; } public void setLeftChild(TreeNode leftChild) { this.leftChild = leftChild; } public TreeNode getRightChild() { return rightChild; } public void setRightChild(TreeNode rightChild) { this.rightChild = rightChild; } @Override public String toString() { return "TreeNode [parent=" + (parent==null?null:parent.getUserObject()) + ", leftChild=" + (leftChild==null?null:leftChild) + ", rightChild=" + (rightChild==null?null:rightChild) + ", userObject=" + userObject + "]"; } } }