微軟,Google面試題 (11) —— 求二叉排序樹的鏡像

題目:輸入一顆二元查找樹,將該樹轉換爲它的鏡像,即在轉換後的二元查找樹中,左子樹的結點都大於右子樹的結點。用遞歸和循環兩種方法完成樹的鏡像轉換。
例如輸入:

     8
    /  /
  6      10
 //       //
5  7    9   11
輸出:

      8
    /  /
  10    6
 //      //
11  9  7  5
定義二元查找樹的結點爲:
解法一:採用遞歸思路,層層交換節點的左右孩子指針。(不能交換值)
解法二:用棧代替遞歸。因爲遞歸的本質是編譯器產生了一個函數調用的棧。做法是首先將root節點push入棧。然後進入循環,當棧不爲空時,pop棧頂。交換棧頂的左右子樹。將左右子樹分別push進棧。繼續循環。
本題無論採用什麼方式遍歷樹,只要保證每個節點只訪問一次,在訪問節點的時候交換左右子樹,都能得到正確的結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章