亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

非遞歸深度優先搜索算法

非遞歸深度優先搜索算法

精慕HU 2019-11-21 14:15:03
我正在尋找一種針對非二叉樹的非遞歸深度優先搜索算法。很感謝任何形式的幫助。
查看完整描述

3 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

DFS:


list nodes_to_visit = {root};

while( nodes_to_visit isn't empty ) {

  currentnode = nodes_to_visit.take_first();

  nodes_to_visit.prepend( currentnode.children );

  //do something

}

BFS:


list nodes_to_visit = {root};

while( nodes_to_visit isn't empty ) {

  currentnode = nodes_to_visit.take_first();

  nodes_to_visit.append( currentnode.children );

  //do something

}

兩者的對稱性很酷。


更新:如前所述,take_first()刪除并返回列表中的第一個元素。


查看完整回答
反對 回復 2019-11-21
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

您將使用一個堆棧來保存尚未訪問的節點:


stack.push(root)

while !stack.isEmpty() do

    node = stack.pop()

    for each node.childNodes do

        stack.push(stack)

    endfor

    // …

endwhile


查看完整回答
反對 回復 2019-11-21
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

如果您有指向父節點的指針,則無需額外的內存即可完成操作。


def dfs(root):

    node = root

    while True:

        visit(node)

        if node.first_child:

            node = node.first_child      # walk down

        else:

            while not node.next_sibling:

                if node is root:

                    return

                node = node.parent       # walk up ...

            node = node.next_sibling     # ... and right

請注意,如果子節點存儲為數組而不是通過同級指針存儲,則下一個同級可以找到:


def next_sibling(node):

    try:

        i =    node.parent.child_nodes.index(node)

        return node.parent.child_nodes[i+1]

    except (IndexError, AttributeError):

        return None

分享編輯

如果您有指向父節點的指針,則無需額外的內存即可完成操作。


def dfs(root):

    node = root

    while True:

        visit(node)

        if node.first_child:

            node = node.first_child      # walk down

        else:

            while not node.next_sibling:

                if node is root:

                    return

                node = node.parent       # walk up ...

            node = node.next_sibling     # ... and right

請注意,如果子節點存儲為數組而不是通過同級指針存儲,則下一個同級可以找到:


def next_sibling(node):

    try:

        i =    node.parent.child_nodes.index(node)

        return node.parent.child_nodes[i+1]

    except (IndexError, AttributeError):

        return None

分享編輯


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關注
  • 824 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號