1 定义树节点对象
public class TreeNode {
/**
* 节点属性
/
private String name;
/*
* 子节点
*/
public List children=new ArrayList<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
}
2 遍历树
/**
* 遍历树 从上到下
*/
public class TreeTraversal {
public void levelOrderTraversal(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
if (root != null) {
queue.offer(root);
}
while (!queue.isEmpty()) {
TreeNode node = queue.poll();//出队元素
System.out.println(node.getName());
for (TreeNode child : node.children) {
queue.offer(child);//添加队列元素
}
}
}
}
3 测试
public class TreeTest {
public static void main(String[] args) {
// 构建一个树
TreeNode root = new TreeNode();
root.setName("根节点");
TreeNode treenode21=new TreeNode();
treenode21.setName("第2层-第1个节点");
TreeNode treenode31=new TreeNode();
treenode31.setName("第3层-第1个节点");
treenode21.getChildren().add(treenode31);
TreeNode treenode22=new TreeNode();
treenode22.setName("第2层-第2个节点");
root.children.add(treenode21);
root.children.add(treenode22);
//从上到下顺序遍历树节点
TreeTraversal treeTraversal = new TreeTraversal();
treeTraversal.levelOrderTraversal(root);
}
}