第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

非遞歸深度優(yōu)先搜索算法

非遞歸深度優(yōu)先搜索算法

我正在尋找一種針對(duì)非二叉樹的非遞歸深度優(yōu)先搜索算法。很感謝任何形式的幫助。
查看完整描述

3 回答

?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

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

}

兩者的對(duì)稱性很酷。


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


查看完整回答
反對(duì) 回復(fù) 2019-11-21
?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

您將使用一個(gè)堆棧來保存尚未訪問的節(jié)點(diǎn):


stack.push(root)

while !stack.isEmpty() do

    node = stack.pop()

    for each node.childNodes do

        stack.push(stack)

    endfor

    // …

endwhile


查看完整回答
反對(duì) 回復(fù) 2019-11-21
?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊

如果您有指向父節(jié)點(diǎn)的指針,則無需額外的內(nèi)存即可完成操作。


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

請(qǐng)注意,如果子節(jié)點(diǎn)存儲(chǔ)為數(shù)組而不是通過同級(jí)指針存儲(chǔ),則下一個(gè)同級(jí)可以找到:


def next_sibling(node):

    try:

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

        return node.parent.child_nodes[i+1]

    except (IndexError, AttributeError):

        return None

分享編輯

如果您有指向父節(jié)點(diǎn)的指針,則無需額外的內(nèi)存即可完成操作。


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

請(qǐng)注意,如果子節(jié)點(diǎn)存儲(chǔ)為數(shù)組而不是通過同級(jí)指針存儲(chǔ),則下一個(gè)同級(jí)可以找到:


def next_sibling(node):

    try:

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

        return node.parent.child_nodes[i+1]

    except (IndexError, AttributeError):

        return None

分享編輯


查看完整回答
反對(duì) 回復(fù) 2019-11-21
  • 3 回答
  • 0 關(guān)注
  • 831 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)