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)
生成(根,0)
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())。
通常,如果您想知道您编写的某些代码是否正确,请编写一个测试!!