所以我不是要求树的对角线视图,幸运的是我已经知道了。我问我是否从45度角查看树只有几个节点应该是可见的。因此,存在一个与x轴成45度角的平面。所以我们需要打印从该平面可见的所有节点。
例如:
1
/ \
2 3
/ \ / \
4 5 6 7
因此,如果我从那个平面看,我只会看到节点[4,6,7]为5和6彼此重叠。如果我在6处添加另一个节点,现在它将隐藏7.如何做到这一点?我在网上搜索但找不到答案。
谢谢!
答案 0 :(得分:0)
我给你一个抽象的答案,因为这个问题不是语言特定的。
像这样记录树的问题是使用递归。
我的意思是遍历正在向下节点和向上节点。
如果您编写了一个可以返回当前节点深度的高度助手,该怎么办?
对于每个深度级别,将值放在数组中。
然后,写入数组的值。
然后你可以获取最后一个数组的长度并确定每个节点所需的空间量。
允许数组保存空值,否则你必须跟踪哪些节点没有子节点。
int total_depth = tree.getTotalHeight();
int arr[total_depth] = {};
for(int i = total_depth; i--;){
// there is a formula for the max number of nodes at a given depth of a binary tree
arr[i] = int arr[maximum_nodes_at_depth]
}
tree.inorderTraverse(function(node){
int depth = node.getHeightHelper();
// check if item is null
if( node!=nullptr && node.Item != NULL)
{
arr[depth].push(node.Item)
}
else
{
arr[depth].push(NULL)
}
})
所以现在你必须计算树的大小,然后动态计算每个节点前面有多少个空格。深度越低,以它为中心的前缀空间越多。
我道歉但是伪代码是javascript和c ++语法的混合....这应该永远不会发生lol