如图所示,编写程序实现访问顺序为[1,2,3,4,5,6,7],假设其中getFirst(),getSecond()可直接使用,根节点已知。
public class TreeNode {
/**
* 第一个节点.
*/
private TreeNode first;
/**
* 第二个节点.
*/
private TreeNode second;
/**
* 设置first.
* @return 返回first
*/
public TreeNode getFirst() {
return first;
}
/**
* 设置second.
* @return 返回second
*/
public TreeNode getSecond() {
return second;
}
/**
* 获取first.
* @param first 要设置的first
*/
public void setFirst(TreeNode first) {
this.first = first;
}
/**
* 获取second.
* @param second 要设置的second
*/
public void setSecond(TreeNode second) {
this.second = second;
}
}
解答1:
public static void main(String[] args) {
List<TreeNode> fatherNodes = new ArrayList<>();
fatherNodes.add(new TreeNode());
List<TreeNode> results = new ArrayList<>();
scanTree(fatherNodes, results);
}
private static void scanTree(List<TreeNode> fatherNodes, List<TreeNode> results) {
List<TreeNode> childrenNode = getChildren(fatherNodes); //获取直接子节点
if (!childrenNode.isEmpty()) {
results.addAll(childrenNode);
scanTree(childrenNode, results);
}
}
private static List<TreeNode> getChildren(List<TreeNode> treeNodes) {
List<TreeNode> temp = new ArrayList<>();
for (TreeNode treeNode : treeNodes) {
if (treeNode.getFirst() != null) {
temp.add(treeNode.getFirst());
}
if (treeNode.getSecond() != null) {
temp.add(treeNode.getSecond());
}
}
return temp;
}
解答2:
public static void main(String[] args) {
LinkedList<TreeNode> nodes= new LinkedList<>();
fatherNodes.add(new TreeNode());
while(!nodes.isEmpty()){
TreeNode node=nodes.remove(0);
System.out.println(node);
if (treeNode.getFirst() != null) {
nodes.add(treeNode.getFirst());
}
if (treeNode.getSecond() != null) {
nodes.add(treeNode.getSecond());
}
}
}