NHN面试之二叉树遍历

来源:互联网 发布:运动软件哪个好 编辑:程序博客网 时间:2024/05/23 16:01

前不久去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 stubSystem.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 begin123456Test end

这种方法是偶然间想到的,感觉这个题目还有更好的方法,如果有人知道,希望留言一起讨论。

原创粉丝点击