有什么方法可以将 depth/level 存储在节点迭代深度优先搜索的 level 和 arraylist 的 hashmap 中?

Is there any way we can store depth/level in a hashmap of level and arraylist of node iterative depth first search?

我知道这是某种编码挑战,我试图解决我使用 BFS 解决的问题,但我也想使用 dfs 解决它。那么有没有一种方法可以在迭代 DFS 中使用节点存储深度,我知道这可以使用递归轻松实现。这是我的进度:

public HashMap<Integer, ArrayList<TreeNode>> getUsingDFS(TreeNode root){
        HashMap<Integer, ArrayList<TreeNode>> map = new HashMap();
    
        List<TreeNode> visited = new ArrayList();
        
        Stack<TreeNode> stack = new Stack();
        stack.add(root);
        int level = 0;
        
        int top = 1;
        
        while(!stack.isEmpty()){
            TreeNode tempNode = stack.pop();

            //level / depth store here.
            map.put(level, map.getOrDefault(level, new ArrayList()).add(tempNode));
            
            
            visited.add(tempNode);
            
            if(tempNode.left != null){
                queue.add(tempNode.left);
            }
            
             if(tempNode.right != null){
                queue.add(tempNode.right);
            }
                
            

        }
    }

我是这样实现的。

 public HashMap<Integer, ArrayList<LevelNode>> getUsingDFS(TreeNode root){
        HashMap<Integer, ArrayList<LevelNode>> map = new HashMap();
        
        Queue<LevelNode> queue = new LinkedList();
        queue.add(new LevelNode(root, 0));
        
        while(!queue.isEmpty()){
            LevelNode tempNode = queue.poll();
            
            ArrayList<LevelNode> list = map.getOrDefault(tempNode.level, new ArrayList());
            list.add(tempNode);
            
            map.put(tempNode.level, list);
            
            if(tempNode.node.left != null){
                queue.add(new LevelNode(tempNode.node.left, tempNode.level+1));
            }
            
             if(tempNode.node.right != null){
                queue.add(new LevelNode(tempNode.node.right, tempNode.level+1));
            }
        }
        return map;
 }

class LevelNode{
    TreeNode node;
    int level;
    
    LevelNode(TreeNode node, int level){
        this.level = level;
        this.node = node;
    }
}