慕桂英546537
2019-02-19 21:19:24
代碼:代碼內容為二叉樹的中序遍歷。在調試代碼的時候,斷點設到44行,然后點擊6次按步執行代碼后,此時node為null,即key=1節點的左孩子,因為不滿足node !== null的條件,所以大括號內代碼沒有執行,跳到了49行,到此為止都明白,但是再按步執行一次就跳到回46行了,不解,這是怎么實現的?求指教~謝謝!樹結構如下圖:
2 回答

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

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