package com.myutil;
import java.util.Random;
/**
* 二叉树
*/
public class BinaryTreeNode<T extends Comparable<T>> {
private T element;
private BinaryTreeNode<T> left;
private BinaryTreeNode<T> right;
public T getElement() {
return element;
}
public void setElement(T element) {
this.element = element;
}
public BinaryTreeNode<T> getLeft() {
return left;
}
public void setLeft(BinaryTreeNode<T> left) {
this.left = left;
}
public BinaryTreeNode<T> getRight() {
return right;
}
public void setRight(BinaryTreeNode<T> right) {
this.right = right;
}
/**
* 将元素插入二叉树
*
* @param element 元素
* @return 插入后的节点
*/
public BinaryTreeNode<T> insert(T element) {
if (element == null) {
throw new IllegalArgumentException("Element must be not null.");
}
BinaryTreeNode<T> currentNode = null;
if (this.element == null) {
currentNode = this;
currentNode.element = element;
} else {
currentNode = compareToElement(element, this);
}
return currentNode;
}
private BinaryTreeNode<T> compareToElement(T element, BinaryTreeNode<T> curr) {
if (element.compareTo(curr.element) == -1) {
if (curr.left == null) {
BinaryTreeNode<T> node = new BinaryTreeNode<>();
node.element = element;
curr.left = node;
return node;
} else {
return compareToElement(element, curr.left);
}
} else {
if (curr.right == null) {
BinaryTreeNode<T> node = new BinaryTreeNode<>();
node.element = element;
curr.right = node;
return node;
} else {
return compareToElement(element, curr.right);
}
}
}
/**
* 先序遍历
*
* @return 按先序遍历顺序展示节点值
*/
public String preOrderTraversal() {
return concatPreOrder(this);
}
private String concatPreOrder(BinaryTreeNode<T> node) {
StringBuilder ret = new StringBuilder();
if (node.left != null) {
ret.append(concatPreOrder(node.left));
}
ret.append(node.element).append(" ");
if (node.right != null) {
ret.append(concatPreOrder(node.right));
}
return ret.toString();
}
/**
* 中序遍历
*
* @return 按中序遍历顺序展示节点值
*/
public String inOrderTraversal() {
return concatInOrder(this);
}
private String concatInOrder(BinaryTreeNode<T> node) {
StringBuilder ret = new StringBuilder();
ret.append(node.element).append(" ");
if (node.left != null) {
ret.append(concatInOrder(node.left));
}
if (node.right != null) {
ret.append(concatInOrder(node.right));
}
return ret.toString();
}
/**
* 后序遍历
*
* @return 按后序遍历顺序展示节点值
*/
public String postOrderTraversal() {
return concatPostOrder(this);
}
private String concatPostOrder(BinaryTreeNode<T> node) {
StringBuilder ret = new StringBuilder();
if (node.right != null) {
ret.append(concatPostOrder(node.right));
}
ret.append(node.element).append(" ");
if (node.left != null) {
ret.append(concatPostOrder(node.left));
}
return ret.toString();
}
public static void main(String[] args) {
BinaryTreeNode<Integer> binaryTree = new BinaryTreeNode<>();
Random random = new Random();
for (int i = 0; i < 5; i++) {
binaryTree.insert(random.nextInt(100));
}
System.out.println(binaryTree.preOrderTraversal());
System.out.println(binaryTree.inOrderTraversal());
System.out.println(binaryTree.postOrderTraversal());
}
}