今天出去面试,遇到一道代码题,要求是分别写出深度优先和广度优先的遍历算法。
树结构是这样
。
树定义
class Tree {
public Tree lc;
public Tree rc;
public String data;
}
深度优先好说,直接使用递归。三行代码就完成
public void deepFirst(Tree root){
System.out.print(root.data);
if(root.lc!=null) deepFirst(root.lc);
if(root.rc!=null) deepFirst(root.rc);
}
广度优先还想了半天,当时是这么写的
public void breadthFirst(Tree root) {
ArrayList<Tree> list = new ArrayList<>();
list.add(root);
for (int n = 0; n < list.size(); n++) {
Tree t = list.get(n);
System.out.print(t.data);
if (t.lc != null) list.add(t.lc);
if (t.rc != null) list.add(t.rc);
}
}
回来试了下,没什么问题。