非递归前序遍历,效率高 和 中序遍历代码都相似
//非递归前序遍历 static void NpreOrder(Node node){
Stack<Node> S=new Stack<Node>(); Node p=node;//初始的时候有2个值 while(!S.isEmpty()||p!=null){ //算法1,栈不为空或者p指向的不是空循环执行下面步骤 if(p!=null){ //算法2,当p指向的不是空的时候,将p指向结点进站 System.out.print("<<<"); System.out.print(n.getKey()); S.push(p); //结点进站 n=n.leftNode; //将指针指向左孩子 } else{ //算法3,如果p指向为空::栈顶出栈并把值赋给指针 p=sk.pop(); p=p.rightNode; }
} }
static void NinOrder(BinTree node){ java.util.Stack<BinTree> s=new java.util.Stack<BinTree>(); //循环前的变量1做好准备 BinTree n=node; //变量2做好准备 while(n!=null||!s.isEmpty()){ if(n!=null){ s.push(n); n=n.lchild; } else{ n=s.pop(); System.out.println(n.date); n=n.rchild; } }}