這是一個二叉樹的中序遍歷,當執行第一個判斷以后得到了最左側的值,也就是根,保存以后判斷右邊是否有值,有的話再次呼叫,如果左邊沒有值右邊沒有值不就停止了嗎?后來的值是怎么遍歷出來的呢?
這個演算法沒想通,請求大佬指點迷津。

uj5u.com熱心網友回復:
這就是個普通dfs遍歷,如果當前節點的兩個子節點都為空說明當前節點是葉子節點,這條路線就可以結束了,否則繼續遞回往下搜索,直到當前路線的葉子節點為止uj5u.com熱心網友回復:
你是不是對遞回有什么誤解?如果左邊有,繼續遞回遍歷左邊(這就是第一個if)
不滿足上面的if,或者上面的if遍歷結束后,就遍歷當前節點,也就是兩句if中間的那句賦值陳述句
然后如果右邊有,就繼續遞回遍歷右子樹(也就是第二個if)
所以,對于你的問題,左右都沒有的時候,就只執行中間那一句(對于第一次回圈,如果左右都沒有,就只執行中間那一句,那就是2;如果左邊有就會先遞回遍歷1,對于1的遞回淶說,它左右都沒有,就只執行中間的陳述句,中間的陳述句就是1自己)
你自己畫個圖一步一步把程式執行的中間結果畫出來就清楚了
uj5u.com熱心網友回復:
請問遍歷1以后左右都沒有,沒有觸發執行這個方法的條件,它是怎么再次執行(回到中間那句),當前物件是2的呢?
用debug除錯的時候是到了1以后再次回到了最中間的陳述句,當前物件為2(根節點),然后保存,再去跑下面的右節點。
uj5u.com熱心網友回復:
謝謝大佬指點
uj5u.com熱心網友回復:
第一個if遞回結束后不就執行中間的陳述句了嗎?那你以為if執行結束了程式會走到哪里?
if執行1以后,1因為沒有子結點(所以不會再進入if,就執行中間的陳述句,賦值為1),然后遞回就結束了;遞回結束后就會到原來的if部分(遞回結束只是if部分結束,不是整個程式結束),所以會繼續執行if后面的中間的陳述句
uj5u.com熱心網友回復:
感謝大佬的講解,困擾了一天的問題終于明白了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/249233.html
標籤:Java SE
上一篇:多人協同檔案編輯
