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;
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
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);//添加队列元素
}
}
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
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);
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.