0001 template <typename T, typename V> 0002 void preorder2(BNP<T> x, V& visit) { 0003 Stack<BNP<T>> S; //辅助栈 0004 if (x) S.push(x); //根节点入栈 0005 while (!S.empty()) { //在栈变空之前反复循环 0006 x = S.pop(); visit(x->data); //弹出并访问当前节点,其非空孩子的入栈次序为先右后左 0007 if (x->rc) S.push(x->rc); 0008 if (x->lc) S.push(x->lc); 0009 } 0010 } //preorder2