2 回答

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊
因為中序遍歷先遍歷左側(cè)的節(jié)點,遍歷完后會執(zhí)行操作,再遍歷右側(cè)節(jié)點。
你觀察到 node 為 null 時,相當(dāng)于 1 左側(cè)的節(jié)點已經(jīng)遍歷完了,也就是inOrderTraverseNode(node.left,callback)
這行代碼已經(jīng)執(zhí)行完畢。所以會執(zhí)行下一行,也就是callback(node.key);
。

TA貢獻(xiàn)1820條經(jīng)驗 獲得超2個贊
就是一個遞歸的過程,在inOrderTraverseNode
這個方法中,每次判斷當(dāng)前節(jié)點是不是null
,不是null
就接著執(zhí)行inOrderTraverseNode(node.left,callback);
,就是遍歷左子樹,一旦遍歷到左子樹的葉子結(jié)點后一個,此時就是null
了,if
里面就不會就不會執(zhí)行,就會跳轉(zhuǎn)到遞歸的上一步,也是就是左子樹的葉子結(jié)點(null
節(jié)點的上一個),這時程序是處于if
判斷里面的,而inOrderTraverseNode(node.left,callback);
這條語句執(zhí)行過了,所以就執(zhí)行下面一條語句,就是你的callback
,輸出key,又執(zhí)行下一條語句inOrderTraverseNode(node.right,callback);
,即從右子樹開始中序遍歷。
總結(jié):什么時候開始執(zhí)行callback
?
遞歸調(diào)用結(jié)束后,在回溯的時候調(diào)用callback
添加回答
舉報