给定一个二叉树:Binary tree of height 3
我想求出同一级别的两个节点之间的水平距离,同时计算不在这两个节点之间的节点**,而不计算节点本身**,请输入
f
/ \
g h
/ \ / \
a d
在节点 a 和 d 之间存在水平距离2。
编辑:
请注意,a到d之间的距离是在同一级别上计算的,不包括a或d的父节点或子节点,而只包括同一级别上缺失的节点。因此,a到d之间的距离将是a〉(x〉y)〉d,其中x和y分别是节点g和h缺失的子节点。因此,如果不计算目标节点a和d,则水平距离为2
4条答案
按热度按时间6rvt4ljy1#
你可以这样想:
现在,您要确定同一级别节点之间的水平距离。例如:f和g。下面是一个循序渐进的方法:
1.执行二叉树的层级顺序遍历,并将值存储在数组中。
1.这会产生一个数组,其中的元素作为节点值。
1.遍历数组元素。当遇到
f
(起始节点)时,将counter设置为0。1.继续遍历数组并检查:
1.如果遇到
g
(结束节点),则停止遍历。1.如果计数器已被设置,并且未遇到结束节点,则将计数器的值更新1。
1.最后,打印计数器的值。
Update:正如anand_v.singh所指出的,如果树的所有级别都没有被完全填充,那么它可能会产生错误的结果。
为了解决这个问题,需要确定一个名为
tree_height
的附加参数。假设树的高度为3,那么数组最多包含2tree_height-1个元素,所有元素都初始化为不等于任何树节点值的值。现在,您可以使用类似于二进制堆的数组表示法,将节点值放入数组中。然后按照上述步骤获得结果。5vf7fwbs2#
就内存而言,这可能不是最佳的解决方案。
因此,欢迎提出建议/改进。
声明某些必需的DS
然后三个函数
最后主要方法
ldioqlga3#
求'a'与'f'的水平距离(hd 1),即根和'd'与'f'的水平距离(hd2)。
取根的hd =0,然后用hd2-hd 1得到两个节点的水平距离B/w,hd 1在根的左边,为负,hd2在根的右边,为正。
计算节点水平距离的函数如下所示。
现在
hd2-hd 1将给予4在您的情况下。
yebdmbv44#