读书人

二叉树后序遍历代码最后一段flat=#039;r#039;;

发布时间: 2012-06-11 17:42:22 作者: rapoo

二叉树后序遍历代码最后一段flat='r';是什么作用?

C/C++ code
后序遍历的代码如下:if(!root)return;stack<Node *> s;s.push(root);char flat='o';  //三异性标志位bool lr[100];  // 1表示左子树,0 表示右子树int i=0;lr[i]=false;  //其实第一个代表根节点的左右特性,无什么用。while(!s.empty()){  Node * n=s.top();  if(n->lchild && flat=='o')    {       s.push(n->lchild);       flat='o';     lr[++i]=true;  //表示该树是一个左子树,i跟着栈涨伏。    }  else if(n->rchild  && flat=='l')    {       s.push(n->rchild);       flat='o';       lr[++i]=false;     }  else     {       cout<<n->data<<"  ";       s.pop();       if(lr[i])           flat='l';       else           flat='r';       --i;//i要跟栈同步变动     }}


[解决办法]
后序遍历二叉树是需要标记的。如果楼主不想进行标记的话可以看我空间的一个改进的算法,不需要使用标记。

读书人网 >C++

热点推荐