diff --git a/bbcli/commands/contents.py b/bbcli/commands/contents.py
index f2af2314e4d5847ee0f0e5026954e7dd13289acb..213cc0308132f6f5721c8f95fa2f325385baa40d 100644
--- a/bbcli/commands/contents.py
+++ b/bbcli/commands/contents.py
@@ -5,7 +5,7 @@ from bbcli.views import contents_view
 import time
 import click
 
-from anytree import Node as Nd, RenderTree
+from anytree import Node as Nd, RenderTree, find_by_attr
 
 from bbcli import check_response
 from bbcli.entities.Node import Node
@@ -39,12 +39,30 @@ def list_contents(ctx, course_id: str, folder_id=None):
         get_children2(ctx, course_id, worklist)
         roots.append(root)
     
+
     for r in roots:
         # print(r)
-        # root = Nd(r.data['title'])
-        root = r.level_order(r)
-        # for pre, fill, node in RenderTree(root):
-        #     click.echo("%s%s" % (pre, node.name))
+
+        # nodes = r.preorder(r)
+        # root= Nd(nodes[0].data['title'])
+        # curr = root
+        # prev = root 
+        # for i in range(1, len(nodes)):
+        #     node = nodes[i]
+        #     if len(node.children) > 0:
+        #         # prev = curr
+        #         nd = Nd(node.data['title'], prev)
+        #         curr = nd
+        #     else:
+        #         nd = Nd(node.data['title'], curr)
+
+        # for node in nodes:
+            # print(node.data['title'])
+
+        root = r.preorder(r)
+
+        for pre, fill, node in RenderTree(root):
+            click.echo("%s%s" % (pre, node.name))
 
     end = time.time()
 
diff --git a/bbcli/entities/Node2.py b/bbcli/entities/Node2.py
index d6617403b7cb2407cc0976623060f5b97b682987..d6932d0adda162e14a4404cd018b2b2c0f02bb6b 100644
--- a/bbcli/entities/Node2.py
+++ b/bbcli/entities/Node2.py
@@ -24,6 +24,19 @@ class Node2:
 	# 	else:
 	# 		return repr(self.data['title'])
 
+ 
+	def levelorder(self, root):
+		if not root: return []
+		res, queue = [], [root]
+		while queue:
+			# res.extend([node.data['title'] for node in queue])
+			res.extend([node for node in queue])
+			level = []
+			for node in queue:
+				level.extend(node.children)
+			queue = level
+		return res
+
 	def preorder(self, root):
 		q = deque([root])
 		out = []
@@ -38,31 +51,67 @@ class Node2:
 	
 				
 
-	def level_order(self, root):
-		l = defaultdict(list) 
+	def preorder(self, root):
+		out = []
+		# l = defaultdict(list) # it is level order when you use dict
 
-		# root_node = Nd(root.data['title'], None, None)
-		# children = [Nd(child.data['title'], root_node, None) for child in root.children]
+		root_node = Nd(root.data['title'])
+		def dfs(node, root_node, parent):
+			if not node: 
+				parent = Nd(node.parent.parent['title']) 
+				return
+			elif parent is None:
+				parent = root_node
+			else:
+				nd = Nd(node.data['title'], parent)
+				parent = nd
+			for c in node.children:
+				dfs(c, root_node, parent)
 
+		dfs(root, root_node, None)
+		return root_node 
+		
+
+	def inorder(self, root):
 		out = []
 		def dfs(node):
 			if not node: return
-			out.append(node)
-			for c in node.children:
-				dfs(c)
-
+			sz = len(node.children)
+			for i in range(sz-1): # loop through everything except the last child
+				dfs(node.children[i])
+			out.append(node.data['title'])
+			dfs(node.children[-1]) # loop through the last node
 
 		dfs(root)
-			
-		for o in out:
-			print(o.data['title'])
-		
-		return root 
+		return out
+	
+	def postorder1(self, root):
+		out = []
+		def dfs(node):
+			if not node: return
+			for child in node.children:
+				dfs(child)
+			out.append(node.data['title'])
+		dfs(root)
+		return out
+
+	def postorder2(self, root):
+		if not root:
+			return []
+		result, stack = [], [root]
+		while stack:
+			node = stack.pop()
+			result.append(node.data['title'])
+			for child in node.children:
+				if child:
+					stack.append(child)
+		return result[::-1]
+
 
 
 		
-	# def __str__(self, level=0):
-	# 	ret = '\t'*level+self.data['title']+'\n'
-	# 	for child in self.children:
-	# 		ret += child.__str__(level+1)
-	# 	return ret
\ No newline at end of file
+	def __str__(self, level=0):
+		ret = '\t'*level+self.data['title']+'\n'
+		for child in self.children:
+			ret += child.__str__(level+1)
+		return ret
\ No newline at end of file