给定二叉树,找到垂直线上相同节点的垂直和。通过不同的垂直线打印所有的和。给定二叉树中的垂直和
要了解垂直线是什么,我们需要首先定义水平距离。如果两个节点具有相同的水平距离(HD),则它们位于相同的垂直线上。 HD的想法很简单。根的HD为0,右边缘(连接到右子树的边缘)被认为是+1水平距离,左边缘被认为是-1水平距离。例如,在上述树中,节点4的HD为-2,节点2的HD为-1,HD为5和6为0,节点7的HD为+2。
实例:
1
/ \
2 3
/\ /\
4 5 6 7
这棵树5条垂直线
垂直线-1只有一个节点4 =>垂直总和为4
垂直线-2:具有垂直线3:有三个节点:1,5,6 =>垂直和是1 + 5 + 6 = 12
垂直线-4:只有一个节点3 =>垂直总和是3
垂直线-5:仅具有一个节点7 =>垂直总和是7
所以预期的输出是4, 2,12,3,7
我的解决办法: 我想出来AO针对此问题(nlong(n))的溶液中。这个想法是:
(1)使用前序遍历为每个节点获取HD,并将HD及其关联节点存储在一个数组中。
(2)由HD对数组进行排序
(3)遍历所述排序后的数组打印结果。
我相信这不是最适合这个问题的。谁能帮助我提供更好的解决方案?
为什么你存储每个节点?您只需存储每个HD的总和,并在遍历树时更新它。 –
[二叉树的垂直和]的可能重复(http://stackoverflow.com/questions/9646575/vertical-sum-of-a-binary-tree) –
看起来像在这里解决同样的问题。 http://stackoverflow.com/questions/9646575/vertical-sum-of-a-binary-tree – krishnakamathk