public static int getVerticalDistance(ParserNode node, int childIndex,
			int symbolSize) {

		List<ParserNode> children = node.getChildren();
		int childrenSize = children.size();

		// vertikalna udaljenost najnižih sklopova i čvorova sa samo jednim
		// djetetom je 0
		if (node.getHeight() <= 2 || childrenSize == 1)
			return 0;

		int height = 0;
		if (childIndex < childrenSize / 2) {
			// dijete se nalazi u lijevim(gornjim) podstablima, pa je relativna
			// udaljenost negativna
			for (int i = childIndex + 1; i < childrenSize / 2; i++) {
				// na relativnu udaljenost se dodaju visine svih podstabala od
				// i+1 do srednjeg
				height -= getTreeHeight(children.get(i), symbolSize);
				// Ako je i-to dijete operacija, još je potrebno dodati razmak
				// između podstabala
				if (children.get(i).isOp())
					height -= symbolSize;
			}
			// na relativnu udaljenost se dodaje desna visina podstabla djeteta
			height -= getTreeHeightRight(children.get(childIndex), symbolSize);
			// na relativnu udaljenost se dodaje razmak od gornjeg ruba zadanog
			// čvora do linije ulaza zadanog djeteta
			height -= (childIndex + 1) * symbolSize / (childrenSize + 1);
		} else {
			// dijete se nalazi u desnim (donjim) podstablima, pa je relativna
			// udaljenost pozitivna
			for (int i = childIndex - 1; i >= childrenSize / 2; i--) {
				// na relativnu udaljenost se dodaju visine svih podstabala od
				// i-1 do srednjeg
				height += getTreeHeight(children.get(i), symbolSize);
				// Ako je i-to dijete operacija, još je potrebno dodati razmak
				// između podstabala
				if (children.get(i).isOp())
					height += symbolSize;
			}
			// na relativnu udaljenost se dodaje lijeva visina podstabla djeteta
			height += getTreeHeightLeft(children.get(childIndex), symbolSize);
			// na relativnu udaljenost se dodaje razmak od donjeg ruba zadanog
			// čvora do linije ulaza zadanog djeteta
			height += (childrenSize - childIndex) * symbolSize
					/ (childrenSize + 1);
		}
		return height;
	}