Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有任何方法可以将深度/级别存储在节点迭代深度优先搜索的级别和数组列表的hashmap中?_Java_Stack_Iteration_Depth First Search - Fatal编程技术网

Java 是否有任何方法可以将深度/级别存储在节点迭代深度优先搜索的级别和数组列表的hashmap中?

Java 是否有任何方法可以将深度/级别存储在节点迭代深度优先搜索的级别和数组列表的hashmap中?,java,stack,iteration,depth-first-search,Java,Stack,Iteration,Depth First Search,我知道这是一种编码挑战,我试图解决一个问题,我用BFS解决了它,但我也想用dfs解决它。有没有一种方法可以在迭代DFS中使用节点存储深度,我知道这可以通过递归轻松实现。以下是我的进展: public HashMap<Integer, ArrayList<TreeNode>> getUsingDFS(TreeNode root){ HashMap<Integer, ArrayList<TreeNode>> map = new Hash

我知道这是一种编码挑战,我试图解决一个问题,我用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);
            }
                
            

        }
    }
公共HashMap getUsingDFS(TreeNode根目录){ HashMap=newHashMap(); 访问列表=新建ArrayList(); 堆栈=新堆栈(); stack.add(root); 智力水平=0; int-top=1; 而(!stack.isEmpty()){ TreeNode tempNode=stack.pop(); //水平/深度存储在这里。 put(level,map.getOrDefault(level,newArrayList()).add(tempNode)); add(tempNode); if(tempNode.left!=null){ add(tempNode.left); } if(tempNode.right!=null){ 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;
    }
}
公共HashMap getUsingDFS(TreeNode根目录){ HashMap=newHashMap(); Queue Queue=new LinkedList(); 添加(新的LevelNode(根,0)); 而(!queue.isEmpty()){ LevelNode tempNode=queue.poll(); ArrayList=map.getOrDefault(tempNode.level,新的ArrayList()); list.add(tempNode); map.put(tempNode.level,list); if(tempNode.node.left!=null){ 添加(新的LevelNode(tempNode.node.left,tempNode.level+1)); } if(tempNode.node.right!=null){ 添加(新的LevelNode(tempNode.node.right,tempNode.level+1)); } } 返回图; } 类级别节点{ 树节点; 智力水平; LevelNode(树节点,int级别){ 这个水平=水平; this.node=节点; } }
你所说的“门店深度”是什么意思?存储在哪里,用于什么目的?您是否在问如何进行迭代深度优先搜索?如果是,您是否尝试过搜索解决方案,例如使用web search for?因此我想将深度存储为键,并将节点的arraylist存储在hashmap中。我已经编辑了这个问题。回答你的问题:是的,有一种方法。现在读一下:你的意思是想将
TreeNode
对象的深度与对象一起存储在队列中?如果是这样,创建一个类,将这两个值作为字段。并将其添加到队列中。