Java 将二叉树转换为列表<;列表<;节点>&燃气轮机;

Java 将二叉树转换为列表<;列表<;节点>&燃气轮机;,java,algorithm,tree,Java,Algorithm,Tree,我的算法正确吗 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>()

我的算法正确吗

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);
}
List ol=new ArrayList();
生成(根,0)
无效生成(节点,整数级)
{ 
if(node==null)
返回;
列表il;
如果(ol.size()<级别){
il=新的ArrayList();
}否则{
il=ol.get(水平);
}
添加(节点);
ol.put(电平,il);
构建(节点左,级别+1);
构建(右节点,级别+1);
}

假设您需要每个级别的节点列表,这似乎是正确的,除了:

  • ol.put(电平,il)列表没有put方法(在这种情况下,它将是
    set
  • 在为该级别创建新的数组列表后,我会将该行放在上面并添加一个
    ol.add(il)
  • 我还将外部列表作为方法参数传递,而不是使用成员变量(尽管这更像是一个设计问题)
  • 有一个
  • 编辑:澄清第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
    }
    
    if(ol.size()
    否,如果级别=大小+1,
    添加(il)
    就足够了
    add(index,il)
    将右移条目(这将打破顺序),不适用于index>size。不需要右移。我们需要在列表中添加一个元素i@dojo确切地说,这就是为什么不应该使用
    add(index,il)
    ,或者更好地说
    add(size(),il)
    add(il)相同
    if index==size()(这是唯一不会破坏逻辑的方法):)add(il)将把elemet添加到末尾,我们应该替换索引i中的条目(list),而不是将ad添加到外部列表的末尾。@dojo 1。要替换,您需要
    设置(…)
    。2.这仅在元素已初始化时有效。如果索引大于等于大小,这将不起作用。从JavaDoc上的
    set()
    IndexOutOfBoundsException-如果指定的索引超出范围(index<0 | | index>=size())。
    通常,如果您想知道您编写的某些代码是否正确,请编写一个测试!!