前段時間去一家公司參加面試,碰到了乙個問題,講的是樹的映象問題,當時莫名其妙,後面想想應該是跟平面鏡成像原理似的,回來研究後得出如下結論。
問題描述:輸入一顆二元查詢樹,將該樹轉換為它的映象,即在轉換後的二元查詢樹中,左子樹的結點都大於右子樹的結點。用遞迴和迴圈兩種方法完成樹的映象轉換。
例如輸入:
8/ /
6 10
// //
5 7 9 11
輸出:
8 / /
10 6
// //
11 9 7 5
定義二元查詢樹的結點為:
[cpp]view plain
copy
print?
struct
bstreenode
;
思路:題目要求用兩種方法,遞迴和迴圈,其實質是一樣的。
解法一:用遞迴。假設當前結點為pnode,只需交換該結點的左右子女,然後分別遞迴求解左子樹和右子樹即可。**極為簡單。
解法二:用迴圈,需要乙個輔助棧完成,每次取棧頂元素交換左右子女,然後將左右子女分別壓入輔助棧,當棧中元素為空時,結束迴圈。其實不論是遞迴也好,迴圈也好,都是利用棧的特性完成。
參考**:
[cpp]view plain
copy
print?
//函式功能 : 輸入一顆二元查詢樹,將該樹轉換為它的映象
//函式引數 : proot為根結點
//返回值 : 根結點
bstreenode * mirror_solution1(bstreenode * proot)
return
proot;
}
[cpp]view plain
copy
print?
bstreenode * mirror_solution2(bstreenode * proot)
} return
proot;
}
學習筆記22 二叉樹的映象
題目 請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。思路 先前序遍歷這課二叉樹的每個節點,如果遍歷到的節點有子節點,就交換它的兩個子節點。當交換完所有非葉節點的左 右子節點之後,就得到了樹的映象。分別有遞迴和迭代兩種解法,推薦遞迴解法。核心 如下 struct binarytreenode 遞...
Docker 學習筆記 映象技術
docker映象一般的儲存位置 ubuntu var lib docker 也可以使用命令docker info檢視映象的儲存位置 檢視映象列表 docker images options repository a all 顯示所有映象 default false f filter 過濾顯示 no ...
Docker學習之建立映象
基於已有的基礎映象執行的容器例項,對其進行修改,然後commit成新的映象 docker commit a hardy9sap 163.com author m comment message 容器名稱orid itany nginx v1.0 說明 a m 都是可選的 itany nginx v1...