二叉树由各种节点组成;特点:
- 每个节点都可以有左子节点,右子节点
- 每一个节点都有一个值
节点代码:
public class Node {
// 左子节点
public Node leftNode;
// 右子节点
public Node rightNode;
// 值
public Object value;
}
二叉树的插入和遍历,实现代码:
public class Node {
// 左子节点
public Node leftNode;
// 右子节点
public Node rightNode;
// 值
public Object value;
// 插入数据
public void add(Object v) {
// 如果当前节点没有值,就把数据放在当前节点
if (null == value) {
value = v;
// 如果当前节点有值,就进行判断新增的值与当前值的大小关系
}else {
// 新增的值,比当前值小或者相等
if ((Integer) v - ((Integer)value) <= 0) {
if (null == leftNode) {
leftNode = new Node();
}
leftNode.add(v);
// 新增的值,比当前值大
}else {
if (null == rightNode) {
rightNode = new Node();
}
rightNode.add(v);
}
}
}
// 中序遍历所有的节点
public List<Object> values() {
List<Object> values = new ArrayList<>();
// 左节点的遍历结果
if (null != leftNode) {
values.addAll(leftNode.values());
}
// 当前节点
values.add(value);
// 右左节点的遍历结果
if (null != rightNode) {
values.addAll(rightNode.values());
}
return values;
}
public static void main(String[] args) {
int[] randoms = new int[] {67, 7, 30, 73, 10, 0, 78, 81, 10, 74};
Node roots = new Node();
for (int number : randoms) {
roots.add(number);
}
System.out.println(roots.values());
}
}
输出:
[0, 7, 10, 10, 30, 67, 73, 74, 78, 81]