Java 是否有任何方法可以将深度/级别存储在节点迭代深度优先搜索的级别和数组列表的hashmap中?
我知道这是一种编码挑战,我试图解决一个问题,我用BFS解决了它,但我也想用dfs解决它。有没有一种方法可以在迭代DFS中使用节点存储深度,我知道这可以通过递归轻松实现。以下是我的进展: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
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
对象的深度与对象一起存储在队列中?如果是这样,创建一个类,将这两个值作为字段。并将其添加到队列中。