Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
Python 什么';这个DFS实现有什么问题?_Python_Depth First Search - Fatal编程技术网

Python 什么';这个DFS实现有什么问题?

Python 什么';这个DFS实现有什么问题?,python,depth-first-search,Python,Depth First Search,我不确定下面的深度优先搜索代码有什么问题。预期vs程序输出包含在末尾。我通过运行Geeksforgeks的代码(对他们进行s/o)获得了预期的输出。任何帮助都将不胜感激。 这是我的密码: class Node: def __init__(self, val): self._val = val self._chdrn = [] class Nary: def __init__(self, n: int): self._n = n

我不确定下面的深度优先搜索代码有什么问题。预期vs程序输出包含在末尾。我通过运行Geeksforgeks的代码(对他们进行s/o)获得了预期的输出。任何帮助都将不胜感激。 这是我的密码:

class Node:
    def __init__(self, val):
        self._val = val
        self._chdrn = []

class Nary:

    def __init__(self, n: int):
        self._n = n
        self._root = None

    def insert(self, val: int):
        nn = Node(val)
        if not self._root:
            self._root = nn
        else:
            def recur(parent: Node):
                print("Parent: ", parent._val)
                if len(parent._chdrn) < self._n:
                    parent._chdrn.append(nn)
                    return 1
                else:
                    for chdl in parent._chdrn:
                        ret = recur(chdl)
                        if ret == 1:
                            break
            parent = self._root
            recur(parent)

    def dfs(self):
        def _dfs(node: Node):
            if not node: return
            print(node._val, end=' ')
            for chld in node._chdrn:
                # print("current child = ", chld._val)
                _dfs(chld)
        _dfs(self._root)

Tree  = Nary(3)
for i in range(10): Tree.insert(i)
Tree.dfs()
类节点:
定义初始值(self,val):
自我。_val=val
self.\u chdrn=[]
第三类:
定义初始化(self,n:int):
自
self.\u根=无
def插入(自身,val:int):
nn=节点(val)
如果不是自根:
自根=nn
其他:
def recur(父级:节点):
打印(“父项:”,父项。\u val)
如果len(父项)
# 预期产出:01145627893

程序输出:0 1 4 7 8 9 5 6 2 7 8 9 3

您的DFS代码没有任何问题。您使用
insert
方法构建的树是错误的

recur
中循环遍历子对象时,需要在递归情况下返回。否则,将在多个父节点下插入同一节点

class Node:
    def __init__(self, val):
        self._val = val
        self._chdrn = []


class Nary:

    def __init__(self, n: int):
        self._n = n
        self._root = None

    def insert(self, val: int):
        print(f"Inserting {val}")
        nn = Node(val)
        if not self._root:
            self._root = nn
        else:
            def recur(parent: Node):
                if len(parent._chdrn) < self._n:
                    print(f"Added under parent: {parent._val}")
                    parent._chdrn.append(nn)
                    return 1
                else:
                    for chdl in parent._chdrn:
                        ret = recur(chdl)
                        if ret == 1:
                            return 1  # not just break

            parent = self._root
            recur(parent)

    def dfs(self):
        def _dfs(node: Node):
            if not node: return
            print(node._val, end=' ')
            for chld in node._chdrn:
                # print("current child = ", chld._val)
                _dfs(chld)

        _dfs(self._root)


Tree = Nary(3)
for i in range(10): Tree.insert(i)
Tree.dfs()
您应该绘制树并手动执行DFS验证

0 1 4 7 8 9 5 6 2 3