My input results are 24, 4, 2, 3, 9, 10, 32 , and I get the following result 2, 3, 4, 24 .
I am using the stack. When I manually checked this program, node does not go through else if in 4 on the stack, even if it has the correct subtree.
public void inorderNonRcursive(Node root){ Stack s = new Stack(); Node node = root; Node k; int c=0; if(node != null) { s.push(node); } while(!s.stack.isEmpty()) { //node=(Node) s.stack.get(s.stack.size()-1); System.out.println("first condition" + (node.getleft() != null && (node.getVisited() == false)) + "second condi" + (node.getRight() != null)); if(node.getleft() != null && (node.getVisited() == false)) { node = node.getleft(); s.push(node); System.out.println(" from 1 "+(++c)); } else if(node.getRight() != null) { k = s.pop(); System.out.println(k.getvalue()); node=node.getRight(); s.push(node); System.out.println(" from 2 "+(++c)); } else { k = s.pop(); System.out.println(k.getvalue()); System.out.println(" from 3 "+(++c)); } } }
source share