[英]Find all nodes near the middle of the tree
我从朋友的访谈中得到了这个问题:给定一棵二叉树,从树中间附近的所有级别打印节点数组(最多两个节点)。 这是一个例子:
1输出为
/ \
2 3
/ \ \
4 5 9
/
10
[ [2,3], [5,9], [10] ]
。
NULL
,则将一个标志(可能为-1或其他)放入插槽。
最后,打印出每个阵列中间的所有节点。
[1], [2,3], [4,5,-1,9],[-1,-1,10,-1]
之后,打印出数组中不是-的所有中间值1。
我可以想到的唯一方法是,从根开始,我们可以将节点分为两种类型:根的左侧和根的右侧 。 对于每个级别,对于左侧节点,我们找到最右边的节点 ,对于右侧,我们找到最左边的节点 。 希望这个能对您有所帮助!
按顺序遍历树并保持节点的水平
节点:4-2-5-1-3-10-9
等级:2-1-2-0-1-3-2
现在对于级别输出,我们从级别0开始,找到左侧的第一个匹配项1-对应的数字是2,找到右侧的第一个匹配项1-对应的数字是3,因此级别1的输出是< 2,3>
对2级输出执行相同的操作是<5,9>
对于第3级输出仅为<10>
时间复杂度O(n)空间复杂度O(n)
与级别订单遍历解决方案相同
在遍历树的所有元素之前,我们永远无法确定元素是否在第ith级存在。 因此,时间复杂度永远无法比O(n)最佳,这与您提出的算法相同。
解决方案中的唯一问题是,对于每个级别,都需要维护一个单独的阵列。 尽管渐近地空间复杂度保持不变,但以绝对数字表示,它变得多余了。
您可以执行以下操作:
对于稀疏树,此算法明智地在空间复杂度方面更好地工作。
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.