---
# System prepended metadata

title: HW2

---

# 資訊科技產業專案設計HW2
## 作業二
[HW2影片連結](https://youtu.be/gvfO49SKrv0)
> :man_in_tuxedo: : interviewer
> :rabbit: : interviewee

### 模擬面試過程
## [104. Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/description/)
:man_in_tuxedo: :你好，公司請我來了解你的情況，並協助你更認識公司，假設你現在是我們公司技術團隊的一員，負責優化使用者的搜尋體驗，我們平台上的住宿按照選項、地理位置分類，你可以想像有一個巨大的地圖，當使用者放大一個特定區域時，他們可以看到更小的區域，這些小區域又可以進一步的放大來顯示更小的區域，一直這樣類推下去。現在為了更好的服務我們的使用者，我想要你根據他們在查看區域的深度，來優化推薦的住宿選項。假設他們在研究一個具體的小區域，可以優先推薦這個區域的住宿，如果他們只是在瀏覽大區域，可以推薦大區域內幾個最受歡迎的住宿選項。你要完成的工作是，設計一個演算法或函式，給定使用者正在查看的區域，這個函式要可以返回這個區域裡我們地理分類系統的深度。

:rabbit: : 開始寫程式之前我想簡介一下我的軟體開發經驗，我主要是以前端為主，主要負責網頁設計跟架構網站，專案的部分我有做異常值檢測的雲端運算服務，是前端跟後端的結合，前端寫一個pivottable檢測異常值，並做ANOVA分析，再連接後端的資料庫，構成一個雲端運算系統。

:man_in_tuxedo: : 好，那我大致了解你的情況了，沒有需要補充的話可以回答剛剛那個情境的可能解決方案了。

:rabbit: : 好，那我想確認我有沒有理解錯這個題目。解設我有一個二元數，它的根結點是3，左子節點是9，右子節點是20，20也有左子節點13，右子節點15。我要回傳這個二元樹的最大深度是多少。

:man_in_tuxedo: : 對，你的理解是對的，請繼續你的解釋。

:rabbit: : 如果我的理解沒有錯的話，我想可用遞迴來解決這個問題。詳細方法是找到一個node，得到這個node的left child和right child的最大深度，並取得這兩個數值中的最大值+1，就會是這個node的maximum depth。
以上面的例子來說，要得到20這個node的maximum depth，就是取13跟15的maxamum depth的最大值，也就是1，再加上1得到2，就是20這個node的maximum depth。
再透過遞迴就可以歷遍整個Binary Tree，就可以得到這個Binary Tree的maximum depth了。

:man_in_tuxedo: : 對，你的理解是對的，但你用遞迴的話會遇到一個問題，就是你要判斷這個節點是否為空。那如果你想好要怎麼寫code的話，可以開始寫你的code了。

:rabbit: : 
```C++=
int maxDepth(TreeNode* root){
	if(!root) return 0;
	int maxLeft = maxDepth(root->left);
	int maxRight = maxDepth(root->right);
	return max(maxLeft, maxRight) + 1;
}
```
:man_in_tuxedo: : 好，這程式沒什麼問題，那我想問你一下這個程式的時間跟空間複雜度是多少?

:rabbit: : 時間複雜度是它所有節點的個數，因為它要歷遍整個binary tree，空間複雜度的部分，因為它是recursive stack，所以是level的個數。

:man_in_tuxedo: : 那我們今天的面試就到這邊，感謝你的時間。


## 簡介對其他同學的檢討狀況(總述)
> 檢討同學: 鮪魚 竹間 喬喬 蔡中文 柯基
## interviewer
### 優點
* [0:01](https://youtu.be/ZChpF6fim00) 這位同學的開場讓整個面試的環境很舒服，不會讓人覺得這個面試是面試官在施展官威的地方。
* 大多數同學都能對interviewee的情況給予適時的回應

### 缺點
* 大多數人都沒有將題目包裝，而是直接用leetcode的原題進行問答。
* 有些人會有口齒不清的情況，導致題意傳達不清。

## interviewee
### 優點
* 大多數人都能cover到REACTO的步驟。
* 有記得舉例子解釋題目。
* 和interviewer多溝通交換想法。

### 缺點
* 在邊打程式邊解釋的時候會有空白期，會讓interviewer感到乏味。
* 會有過多冗詞贅字的情況。 例如:然後... 恩... 厄....
* 一開始忘記解釋題目確認想法及舉例子
* 打字太慢

## 從中學習到什麼
透過看到其他同學的面試過程，學到了其他人所具備但我所不具備的能力，像是interviewee可以提出更好的程式撰寫方式來提升效率，interviewer可以更好的和interviewee溝通，並在講述題目的時候能適度的包裝題目來減少讓interviwee直接看出是經典題而直接被答案來應付interviewer的情況。但我也能辨識出自己的優點，像是口條，溝通節奏以及REACTO步驟的執行完整度等等。