# 資訊科技產業專案設計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步驟的執行完整度等等。