package com.github.qq809203042.coding2017.basic.structures;
/*
* 实现二叉树,
* 只存储int类型
* 内部类代表每个节点:每个节点含有一个键,一个值,一条左链接,一条右链接
*
* 实现插入值操作:当root为空时插在root上:确定某一节点上是否为空
*
*/
public class MyBinaryTree {
private BinaryTreeNode root ;
private int size;
// 构造函数
public MyBinaryTree(){
}
public boolean getValue(Integer key){
return getValue(root,key);
}
private boolean getValue(BinaryTreeNode node,Integer key){
if(node == null){//如果为空,则为空,没有该元素
return false;
}
Integer value = node.getValue();
if(value == key){//找到
return true;
}
else if(value.compareTo(key) > 0){//如果小于该节点对象,比较左节点
return getValue(node.left,key);
}else{
return getValue(node.right,key);//如果小于该节点对象,比较右节点
}
}
public void add(Integer key){
root = add(root, key);
}
private BinaryTreeNode add(BinaryTreeNode node, Integer key) {
if(node == null){//若没有该节点,则创建并添加数据至节点中
node = new BinaryTreeNode(key);
size++;
return node;
}
Integer value = node.getValue();
if(value.compareTo(key) > 0){
node.setLeft(add(node.left,key));
}else if(value.compareTo(key) < 0){
node.setRight(add(node.right,key));
}
return node;
}
public int size(){
return size;
}
// 前序遍历
public void preOrder(){
preOrder(root);
System.out.println();
}
// 中序遍历
public void midOrder(){
midOrder(root);
System.out.println();
}
// 后序遍历
public void aftOrder(){
aftOrder(root);
System.out.println();
}
// 前序遍历
private void preOrder(BinaryTreeNode node){
if(node == null){
return;
}
System.out.print(node.value + " ");
preOrder(node.left);
preOrder(node.right);
}
// 中序遍历
private void midOrder(BinaryTreeNode node){
if(node == null){
return;
}
midOrder(node.left);
System.out.print(node.value + " ");
midOrder(node.right);
}
// 后序遍历
private void aftOrder(BinaryTreeNode node){
if(node == null){
return;
}
aftOrder(node.left);
aftOrder(node.right);
System.out.print(node.value + " ");
}
// 二叉树的节点对象:每个节点含有一个键,一个值,一条左链接,一条右链接和一个节点计数器
private static class BinaryTreeNode {
private Integer value;
private BinaryTreeNode left;
private BinaryTreeNode right;
// 构造函数
BinaryTreeNode(Integer value){
this.value = value;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
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(Integer value) {
this.value = value;
return null;
}
}
}