我已经编写了所有其他内容,如addChild(),insert()等,但似乎我的toInorderToList()不起作用。它应该将树中的所有元素添加到List中,然后我必须打印出列表,但我总是得到那些错误java.util.ArrayList$Itr@70dea4e
我的代码片段
private List<BinaryTreeNode> toInorderList(){
if(this.root == null){
return new ArrayList<BinaryTreeNode>();
}else{
return toInorderList(this.root);
}
}
private ArrayList<BinaryTreeNode> toInorderList(BinaryTreeNode node) {
ArrayList<BinaryTreeNode> treelist = new ArrayList<BinaryTreeNode>();
if(node.left !=null){
toInorderList(node.left);
treelist.add(node.left);
}
treelist.add(this.root);
if(node.right != null){
toInorderList(node.right);
treelist.add(node.right);
}
return treelist;
}
和toString()以及iterator()
public Iterator<BinaryTreeNode> iterator() {
return toInorderList().iterator();
}
public String toString() {
return toInorderList().iterator().toString();
}
答案 0 :(得分:0)
首先,在此代码中:
if(node.left !=null){
toInorderList(node.left);
treelist.add(node.left);
}
treelist.add(this.root);
if(node.right != null){
toInorderList(node.right);
treelist.add(node.right);
}
toInorderList
函数有返回值,因此您需要使用treelist.addAll(toInorderList(node.left);
另外,为了提高内存效率,我可能会在你的函数外部使用一个ArrayList,并让每个递归调用访问它。
private List<BinaryTreeNode> toInorderList(){
if(this.root == null){
return new ArrayList<BinaryTreeNode>();
}else{
ArrayList<BinaryTreeNode> treeList = new ArrayList<BinaryTreeNode>();
toInorderList(this.root, treeList);
return treeList;
}
}
private toInorderList(BinaryTreeNode node, ArrayList<BinaryTreeNode> treelist) {
if(node.left !=null){
toInorderList(node.left, treeList));
treelist.add(node.left);
}
treelist.add(this.root);
if(node.right != null){
toInorderList(node.right, treeList));
treelist.add(node.right);
}
}
答案 1 :(得分:0)
这是树的顺序遍历
private void InOrder(AVLNode<T> T)
{
if(T == null){
return;
}
InOrder(T.left);
System.out.print(T.item + ", ");
InOrder(T.right);
}
创建一个重载并简单地用arraylist add
替换系统 private void InOrder(AVLNode<T> T, ArrayList list)
{
if(T == null){
return;
}
InOrder(T.left, list);
list.add(T.item);
InOrder(T.right, list);
}
我花了两分钟修改我的avl树来接受这个。 root是树的头部,主树的实例化。我内心有一系列的整数
ArrayList<Integer> list = new ArrayList<>;
是我的列表实例化。
root.InOrder(root);
root.InOrder(root, list);
工作得很好