package com.coding.basic;
import com.sun.corba.se.impl.orbutil.graph.Node;
public class BinaryTree <T extends Comparable>{
private BinaryTreeNode root=null;
private int size=0;
/**
* 插入节点,保持二叉树的性质
* @param o
*/
public void insert(T o){
if (size==0) {
root=new BinaryTreeNode<Comparable>(o);
}
else{
insert(o,root);
}
size++;
}
private void insert(T o, BinaryTreeNode<?> ptr) {
if ((ptr.right==null&&(ptr.data.compareTo(o)<=0))){
ptr.right=new BinaryTreeNode<Comparable>(o);
}
else if (ptr.left==null&&(ptr.data.compareTo(o)>0)) {
ptr.left=new BinaryTreeNode<Comparable>(o);
}
else if (ptr.left!=null&&(ptr.data.compareTo(o)>0)) {
insert(o, ptr.left);
}
else {
insert(o, ptr.right);
}
}
private static class BinaryTreeNode <T extends Comparable>{
private T data;
private BinaryTreeNode left;
private BinaryTreeNode right;
private BinaryTreeNode(T o) {
this.data=o;
this.left=null;
this.right=null;
}
private BinaryTreeNode() {
}
}
/**
* 前序遍历
*/
public void preOrder(BinaryTreeNode Node)
{
if (Node != null)
{
System.out.print(Node.data + " ");
preOrder(Node.left);
preOrder(Node.right);
}
}
/**
* 中序遍历
*/
public void midOrder(BinaryTreeNode Node)
{
if (Node != null)
{
midOrder(Node.left);
System.out.print(Node.data + " ");
midOrder(Node.right);
}
}
/**
* 后序遍历
*/
public void posOrder(BinaryTreeNode Node)
{
if (Node != null)
{
posOrder(Node.left);
posOrder(Node.right);
System.out.print(Node.data + " ");
}
}
/**
* @param key查找元素
* @param node
* @return 返回date的node引用
*/
public BinaryTreeNode searchNode(T key,BinaryTreeNode node) {
if (node!=null) {
if (node.data.compareTo(key)==0) {
return node;
}
else if (node.data.compareTo(key)>0) {
return searchNode(key,node.left);
}
else {
return searchNode(key,node.right);
}
}
else{
return null;
}
}
public static void main(String[] args) {
BinaryTree tree=new BinaryTree();
tree.insert(5);
tree.insert(3);
tree.insert(1);
tree.insert(6);
tree.insert(5);
tree.insert(2);
tree.preOrder(tree.root);
System.out.println();
tree.posOrder(tree.root);
System.out.println();
tree.midOrder(tree.root);
System.out.println(tree.searchNode(1, tree.root).data);
}
}