前不久去NHN公司参加面试,如网上形容的那样,比赛和面试的难道都相当高,最终没有通过,当时有道题目还是挺有意思的,下来后,想了一段时间,想到了一种方法。
题目:使用程序遍历二叉树,按照深度来访问二叉树节点,如:
要求的访问顺序是1 2 3 4 5 6
使用一个ArrayList来排序,每当访问后,就把该节点的左右子节点放到ArrayList中,这样就起到了一个排序的功能
import java.util.ArrayList;
import java.util.List;
public class TreeTest {
private String value;
private TreeTest left=null;
private TreeTest right=null;
private TreeTest()
{
}
public TreeTest(String value)
{
this.value=value;
}
public String getValue() {
return value;
}
public TreeTest getLeft() {
return left;
}
public void setLeft(TreeTest left) {
this.left = left;
}
public TreeTest getRight() {
return right;
}
public void setRight(TreeTest right) {
this.right = right;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Test begin");
List<TreeTest> list = new ArrayList<TreeTest>();
//构造二叉树
TreeTest t4 = new TreeTest("4");
TreeTest t5 = new TreeTest("5");
TreeTest t6 = new TreeTest("6");
TreeTest t2 = new TreeTest("2");
t2.setLeft(t4);
TreeTest t3 = new TreeTest("3");
t3.setLeft(t5);
t3.setRight(t6);
TreeTest t1 = new TreeTest("1");
t1.setLeft(t2);
t1.setRight(t3);
list.add(t1);
while(!list.isEmpty())
{
System.out.print(list.get(0).getValue());
TreeTest tmp = list.get(0);
list.remove(0);
if(tmp.getLeft()!=null)
{
list.add(tmp.getLeft());
}
if(tmp.getRight()!=null)
{
list.add(tmp.getRight());
}
}
System.out.println("\nTest end");
}
}
最终输出:
Test begin
123456
Test end
这种方法是偶然间想到的,感觉这个题目还有更好的方法,如果有人知道,希望留言一起讨论。