世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
public class BinaryTree2 {
static class Node {
private Node left;
private Node right;
private int value;
public Node(int value) {
this.value = value;
}
}
private Node root;
private Node addNode (Node curr, int value) {
if (null == curr) {
return new Node(value);
}
if (value < curr.value) {
curr.left = addNode(curr.left, value);
} else if (value > curr.value) {
curr.right = addNode(curr.right, value);
}
return curr;
}
public void addNode (int value) {
final Node tmp = root;
root = addNode(tmp, value);
}
private void pre (Node curr) {
if (null != curr) {
System.out.println(curr.value);
pre(curr.left);
pre(curr.right);
}
}
private void in (Node curr) {
if (null != curr) {
in(curr.left);
System.out.println(curr.value);
in(curr.right);
}
}
private void post (Node curr) {
if (null != curr) {
post(curr.left);
post(curr.right);
System.out.println(curr.value);
}
}
private void level (Node curr) {
if (null != curr) {
LinkedList<Node> linkedList = new LinkedList<>();
linkedList.add(curr);
while (!linkedList.isEmpty()) {
Node tmp = linkedList.poll();
System.out.println(tmp.value);
if (null != tmp.left) {
linkedList.add(tmp.left);
}
if (null != tmp.right) {
linkedList.add(tmp.right);
}
}
}
}
private int size (Node curr) {
if (null == curr) {
return 0;
}
return 1 + size(curr.left) + size(curr.right);
}
private int height (Node curr) {
if (null == curr) {
return 0;
}
int i = height(curr.left);
int j = height(curr.right);
return (i < j) ? (j + 1) : (i + 1);
}
public int height () {
final Node tmp = root;
return height(tmp);
}
public int size () {
final Node tmp = root;
return size(tmp);
}
public void pre () {
final Node tmp = root;
pre(tmp);
}
public void in () {
final Node tmp = root;
in(tmp);
}
public void post () {
final Node tmp = root;
post(tmp);
}
public void level () {
final Node tmp = root;
level(tmp);
}
public static void main(String[] args) {
BinaryTree2 binaryTree2 = new BinaryTree2();
binaryTree2.addNode(4);
binaryTree2.addNode(7);
binaryTree2.addNode(3);
binaryTree2.addNode(5);
binaryTree2.addNode(10);
binaryTree2.addNode(1);
binaryTree2.addNode(8);
System.out.println("前");
binaryTree2.pre();
System.out.println("中");
binaryTree2.in();
System.out.println("后");
binaryTree2.post();
System.out.println("层");
binaryTree2.level();
System.out.println("个数:");
System.out.println(binaryTree2.size());
System.out.println("高度:");
System.out.println(binaryTree2.height());
}
}