先建一个实体类
package com.nubility.test.entity;
public class Node {
//节点数据
public int iData;
//左节点
public Node leftNode;
//右节点
public Node rightNode;
}
然后直接写到main方法里
为了方便都写成静态方法
import java.util.LinkedList;
import java.util.Queue;
import com.nubility.test.entity.Node;
public class NodeTest {
private static Node root = new Node();
public static void main(String[] args) {
root.iData = 88;
insert(80);
insert(95);
insert(76);
insert(82);
insert(90);
insert(98);
insert(83);
printNode(root);
}
/**
* 插入节点的方法
* @param iData 节点数据
*/
private static void insert(int iData) {
Node newNode = new Node();
newNode.iData = iData;
if (root == null) {
root = newNode;
} else {
//先把第一个节点置为根节点
Node current = root;
Node parent;
while(true) {
parent = current;
if (iData < current.iData) {
//如果iData的值比当前节点值小且当前节点无左子节点,放到左节点
current = current.leftNode;
if (current == null) {
parent.leftNode = newNode;
return;
}
} else {
//如果iData的值比当前节点值大且当前节点无右子节,放到右节点
current = current.rightNode;
if (current == null) {
parent.rightNode = newNode;
return;
}
}
}
}
}
private static void printNode(Node root) {
//当前行的最后一个节点
Node last = root;
//下一行的最后一个节点
Node nlast = root;
Queue<Node> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()) {
//指针回到队列的第一个元素
Node node = queue.peek();
//第一个元素弹出
System.out.print(queue.poll().iData + " ");
/** 判断有没有左右子节点,如果有加入队列,移动nlast,保证始终是当前遍历的最后一个节点 */
if (node.leftNode != null) {
queue.add(node.leftNode);
nlast = node.leftNode;
}
if (node.rightNode != null) {
queue.add(node.rightNode);
nlast = node.rightNode;
}
//如果当前队列头上的节点是当前行的最后一个,说明下一个节点要到下一层了,该换行了
if (last == node) {
System.out.println();
last = nlast;
}
}
}
}
参考文章:
二叉树知识:
https://blog.csdn.net/cai2016/article/details/52589952
遍历算法:
https://www.cnblogs.com/zyoung/p/7455916.html