Reputation: 5
I want to print my non-binary tree with level-order traverse. In the code below I indent every time a new set of children has been added, but somehow I need to remove indentations when I go back in the tree again. Here's how this tree prints:
Root
Home
HomeChild1
HomeChild2
Documents (should be same level as Home)
DocumentChild1
DocumentChild2
Downloads (should be same level as Home and Documents)
DownloadsChild1
Code:
queue.add(o); //root
int indent = 0;
while(!queue.isEmpty(){
for(int i=0; i<indent; i++){
print(" ");
}
Object tempObj = queue.remove(o);
print(tempObj.value);
if(tempObj.children != null){
//Adding all childrens, since its not a binary tree I loop throught all children
for(int i=0; i<tempObj.children.length; i++){
queue.add(0, tempObj.children[i];
}
indent++;
}
}
Here is what I want it to look like
Root
Home
HomeChild1
HomeChild2
Documents
DocumentChild1
DocumentChild2
Downloads
DownloadsChild1
Upvotes: 0
Views: 1896
Reputation: 722
You never reset your indent value. You need to copy its value so you can restore it after you went through a group of children
Btw, if you try something recursive it's way easier to handle.
Upvotes: 0
Reputation: 41188
You need to increment the indent when you start processing children, and then decrement it when you reach the end of a group of children.
You would be better off doing this whole thing using something like a recursive call rather than the queue though. The queue is adding a lot of complexity and not helping.
Something like:
recurseTree(Thing obj, String indent) {
print(indent+obj.value);
if (obj.children != null) {
for (Thing child: obj.children) {
recurseTree(child, indent+" ");
}
}
}
You could make some optimisations here (for example only doing the string concatonation once) and you will need to do a bit of tidying up but that should give you the basic framework you need.
Start it using
recurseTree(root, "");
Upvotes: 2