преобразование двоичного дерева в список - PullRequest
0 голосов
/ 11 мая 2011

Мой алгоритм верен?

List<List<Node> > ol = new ArrayList<List<Node>>();
build(root,0)

void build (Node node,int level)
{ 
 if(node==null)
    return;
  List<Node> il;
  if(ol.size() < level){
   il =  new ArrayList<Node>(); 
  }else{
  il= ol.get(level);
  }

il.add(node);
ol.put(level,il);
 build(node.left, level+1);
 build(node.right,level+1);
}

1 Ответ

1 голос
/ 11 мая 2011

Предполагая, что вам нужен список узлов для каждого уровня, это кажется правильным, за исключением:

  1. ol.put(level,il); В списке нет метода put (в этом случае это будет set).
  2. Я бы опустил строку выше и добавил ol.add(il) после создания нового списка массивов для уровня.
  3. Я бы также передал внешний список в качестве параметра метода вместо использования переменной-члена (хотя это скорее проблема проектирования)
  4. После build(root, 0)

Изменить: уточнить нет. 2:

if(ol.size() < level) {
  il = new ArrayList<Node>();
  ol.add(il); //add here only, assuming level = ol.size() + 1 always is true in this case
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...