protected void goPreorder(ParserNode p) {
		if (p != null) {
			List<ParserNode> ch = p.getChildren();
			if (p instanceof NotNode) {
//				Ako je čvor NotNode, u listu za crtanje se dodaje 
//				1. čvor
//				2. Rekurzivno izračunati izraz
//				U ovom načinu prikaza, Not nikada nema zagrada oko sebe.
				nodes.add(p);
				goPreorder(ch.get(0));
			} else if (p.isVar()) {
				nodes.add(p);
			} else if (p.isOp()) {
				if (p.isNot()) {
//					Ubacivanje NOT čvora kod operacija NOR, NAND i XNOR.
//					Primijetite da je taj NOT root svojeg stabla, a čvor p mu
//					je jedini potomak. Taj NOT istodobno nije i root našeg,
//					zadanog stabla funkcije pa se ta činjenica koristi u
//					metodi getNotDepth(). Ovo rješenje jedino ne koristi 
//					dodavanje/brisanje čvorova djece, pa je nešto efikasnije.
					NotNode not = new NotNode();
					not.addChild(p);
					nodes.add(not);
				}
				
//				U listu za crtanje se dodaje 
//				1. Otvorena zagrada
//				2. Rekurzivno izračunati izrazi za svako dijete
//				3. Čvor tmp (Poslije svakog djeteta osim zadnjeg)
//				4. Zatvorena zagrada
				nodes.add(new VariableNode("("));
				for (int i = 0; i < ch.size(); i++) {
					goPreorder(ch.get(i));
					if (i != ch.size() - 1)
						nodes.add(p);
				}
				nodes.add(new VariableNode(")"));
			}
		}
	}