二叉树后序遍历代码最后一段flat='r';是什么作用?
后序遍历的代码如下: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要跟栈同步变动 }}