二叉树的前序、中序、后序遍历的递归版本非常好理解,在这里就不在赘述了。这里主要讲迭代版本。事实上,计算机在进行递归调用时,会隐式的维护一个栈(叫做调用栈,CallStack),调用函数就把局部变量、入参、返回地址(合起来叫做栈帧,StackFrame)一同入栈,从函数返回就出栈。而迭代版本其实就是把这个过程显式的表现出来,手动的去维护这个栈。同时,迭代版本只需要把节点指针入栈出栈,占用的空间也会小一些。前序遍历因为前序遍历的递归版本是所谓的“尾递归”(即递归调用发生在函数体的尾部),将尾递归转换为迭代相对容易一些:voidpostOrder(TreeNode*root){//如果根节点为空,直