1. 节点
public class Node {
public long data;
public Node leftChild;
public Node rightChild;
public Node(long data) {
this.data = data;
}
}
2. 二叉树
public class Tree {
public Node root;
public void insert(long value) {
Node newNode = new Node(value);
Node current = root;
Node parent;
if (root == null) {
root = new Node(value);
return;
}
while (true) {
parent = current;
if (value > parent.data) {
current = current.rightChild;
if (current == null) {
parent.rightChild = newNode;
return;
}
} else {
current = current.leftChild;
if (current == null) {
parent.leftChild = newNode;
return;
}
}
}
}
/**
* 通过数据查找结点
*
* @param value
*/
public Node find(long value) {
Node currentNode = root;
if (root == null) {
return null;
}
while (currentNode.data != value) {
if (value > currentNode.leftChild.data) {
currentNode = currentNode.rightChild;
} else {
currentNode = currentNode.leftChild;
}
if (currentNode == null) {
return null;
}
}
return currentNode;
}
/**
* 前序遍历 : 头。左 右
*
* @param localNode
*/
public void frontOrder(Node localNode) {
if (localNode != null) {
System.out.println(localNode.data + ",");
frontOrder(localNode.leftChild);
frontOrder(localNode.rightChild);
}
}
/**
* 中序遍历
*
* @param localNode
*/
public void inOrder(Node localNode) {
if (localNode != null) {
frontOrder(localNode.leftChild);
System.out.println(localNode.data + ",");
frontOrder(localNode.rightChild);
}
}
/**
* 后序遍历
*/
public void afterOrder(Node localNode) {
if (localNode != null) {
afterOrder(localNode.leftChild);
afterOrder(localNode.rightChild);
System.out.println(localNode.data + ", ");
}
}
}