學習筆記之樹的映象

2021-07-04 16:59:32 字數 1147 閱讀 9804

前段時間去一家公司參加面試,碰到了乙個問題,講的是樹的映象問題,當時莫名其妙,後面想想應該是跟平面鏡成像原理似的,回來研究後得出如下結論。

問題描述:輸入一顆二元查詢樹,將該樹轉換為它的映象,即在轉換後的二元查詢樹中,左子樹的結點都大於右子樹的結點。用遞迴和迴圈兩種方法完成樹的映象轉換。

例如輸入:

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...