package com.coding.basic; /** * 二叉树数据结构 * BinaryTreeNode * @author greenhills * 2017年2月25日 下午9:51:05 */ public class BinaryTreeNode implements Comparable<Object>{ private int height=0; //当前树高度 private Object data; //当前节点数据 private BinaryTreeNode left; //小于当前节点数据data的节点 private BinaryTreeNode right; //大于当前节点数据data的节点 public BinaryTreeNode() { } public BinaryTreeNode(Object data) { this.data = data; } public BinaryTreeNode insert(Object o){ BinaryTreeNode newNode=new BinaryTreeNode(o); BinaryTreeNode that = findNode(o); int result=that.compareTo(o); if(result<0){//节点数据小于插入数据,进右树 that.setRight(newNode); }else if(result>0){ //当前节点数据大于插入数据,进左树 that.setLeft(newNode); }else{ return null; } newNode.height++; //树高度加1 return newNode; } private BinaryTreeNode findNode(Object data){ int result=this.compareTo(data); BinaryTreeNode that = new BinaryTreeNode(); //空节点 if(result<0){ //当前节点数据小于插入数据,进右树 if(this.right==null){ that = this; }else{ that = findNode(this.getRight()); } }else if(result>0){ //当前节点数据大于插入数据,进左树 if(this.left==null){ that = this; }else{ that = findNode(this.getLeft()); } }else{ System.out.println("无效数据"); } return that; } public int getTreeMaxHeight(){ int h=0; //TODO return h; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } 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; } @Override public int compareTo(Object o) { if(this.data==null || o==null) return 0; return Double.valueOf(this.data.toString()).compareTo(Double.valueOf(o.toString())); } }