1. 但是這個算法出現了錯誤,BST
的每個節點應該要小於右邊子樹的所有節點,下面這個二叉樹顯然不是 BST,但是我們的算法會把它判定爲 BST
。
2. 出現錯誤,不要慌張,框架沒有錯,一定是某個細節問題沒注意到。我們重新看一下 BST 的定義,root 需要做的不只是和左右子節點比較,而是要整個左子樹和右子樹所有節點比較。怎麼辦,鞭長莫及啊!
3. 很簡單,其實不需要遞歸地搜索兩邊,類似二分查找思想,根據 target
和 root.val
的大小比較,就能排除一邊。我們把上面的思路稍稍改動:
三種情況分析完畢,填入框架,簡化一下代碼: