这是一个采访问题: 给定二叉树的节点'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