這是一個採訪問題: 給定二叉樹的節點'k',找到它的所有兄弟和表兄弟。沒有可用於節點的nextPointer
。查找給定節點級別的所有節點
考辛斯:在相同的水平給定節點「K」排除「K」
的兄弟我知道答案,可以找到的水平,在其中,k謊言(第1次),然後打印所有節點該級別的節點(第2遍)(使用級別遍歷)。但是,這將是一個2遍算法。任何人都可以爲它提出一個通過或更有效的算法。
實施例:
15
/\
18 19
/\ /\
2 3 4 5
/\//\
1 6 7 8 9
Input: k=6
Output: 1,7,8,9
「更高效」是什麼意思?就時間複雜度而言,該算法是最優的,因爲它具有'O(n)'時間複雜度(在最壞的情況下輸出大小爲'O(n)')。 – kraskevich 2014-10-31 17:40:05
您可以通過在當前級別形成所有條目的列表/集合,並查看其中是否包含「k」來進行單個級別遍歷:只篩選出它的兄弟(s)報告表兄弟可能需要保留一些額外的元數據,儘管...... – twalberg 2014-10-31 17:59:38