如何在java中的二叉树上实现深度优先搜索(DFS)?

Acc*_*ier 5 java algorithm

根据什么在解释维基百科文章关于深度优先搜索,我认为DFS在二叉树是相同的前序遍历根-左- (?我说的对)的权利.

但我只是做了一个小的搜索和得到这个代码,笔者其中声称,DFS需要一棵树如果节点已经访问过记录(或我们是否需要这样一个图的情况下?).

// copyright belongs to the original author 
public void dfs() {
    // DFS uses Stack data structure
    Stack stack = new Stack();
    stack.push(this.rootNode);
    rootNode.visited=true;
    printNode(rootNode);
    while(!stack.isEmpty()) {
        Node node = (Node)s.peek();
        Node child = getUnvisitedChildNode(n);
        if(child != null) {
            child.visited = true;
            printNode(child);
            s.push(child);
        }
        else {
            s.pop();
        }
    }
    // Clear visited property of nodes
    clearNodes();
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

bru*_*ard 5

是的,它是预购.但是,我不喜欢说它是一个遍历,因为你可能不会遍历树,你一找到你的元素就会停止.您打印的程序不是搜索,而是遍历:您正在打印所有内容.在二叉树中搜索的搜索功能是:

public boolean search(Tree t, int i) {
    if(t == null)
        return false;
    elif(t.value() == i)
        return true;
    else
        for(child in t.children()) {
            if(search(child,i))
                return true;
        }
        return false;
        //return search(t.leftTree(), i) or search(t.rightTree(),i) binary tree case
}
Run Code Online (Sandbox Code Playgroud)


use*_*421 4

我认为二叉树上的dps与前序遍历根--左--右是相同的。(我对吗?)

深度优先搜索可以是前序、中序或后序遍历。您不需要堆栈:递归地实现它更容易,在这种情况下,您也不需要将节点标记为已访问。