考虑到停车场,可以将其划分为以下层次结构。
Structure
Level1 Level2 Level3
Row1 Row2 Row3 Row1 Row2 Row3 Row1 Row2 Row3
1...N 1...N 1...N 1...N N....N 1....N 1.....N 1....N 1.....N
此处最底层是连续可用的1到N个点。它非常类似于树数据结构,其中每个节点可以在其子树之一具有可用空间时保持值为true,如果所有子节点都被占用则为false。然后是下一行或者在级别的情况下,检查下一级别。现在我有以下问题:
答案 0 :(得分:0)
基本上,您的问题要求树在每个级别具有任意数量的节点。可以使用 left-child,right-sibling 表示来表示这样的树。而不是通常的二进制树的左右子指针,在这种表示中你有以下指针。
上面的表示允许使用O(n)空间为n个节点表示任意树。有关详细信息,请参阅here。
否则,您还可以使用简单(C ++)向量或链接列表在每个节点上存储任意数量的子指针。当然,这需要比左子,右兄弟表示更多的内存,但同时,这在访问特定节点时处理的节点方面更快。
答案 1 :(得分:0)
回答你的问题:
是的,您可以根据自己的要求实施树。数据结构将是这样的;
public abstract class ParkingLotTreeNode {
private ParkingLotTreeNode [] childNodes;
}
这样,每个节点都将包含其子节点的数组,这样您就可以为停车场设置任意数量的级别和行。
通过上述基本方法,找到停车场的最坏情况将是停车场停车位的总数,这不是寻找空槽的好方法。
可以进行改进以存储在何时设置的布尔标志 特定的孩子的所有停车位都填满了。在 每个节点我们都会有一个标志,表示它的子节点是否有任何节点 剩下的免费点。
public abstract class ParkingLotTreeNode {
private ParkingLotTreeNode [] childNodes;
private Boolean isFull = false;
}
这样找到免费插槽的时间相对较短,因为我们事先知道Levels / Rows已经满了并且不会被遍历。
希望有所帮助!