二叉树的非递归遍历

来源:互联网 发布:车载安卓版电子狗软件 编辑:程序博客网 时间:2024/04/29 20:37

二叉树的非递归遍历

经过上网查找和深思熟虑,总结了比较容易理解的方法.参考:http://blog.csdn.net/algorithm_only/article/details/6976249


非递归先序

根结点先进栈,访问结点值,左孩子依次进栈,直到最左的孩子进栈。然后栈顶指针出栈,退至上一层,然后访问右子树,右子树访问完成之后,退至上一层,直至栈空,节点访问完成。先序遍历访问结点值是在结点进栈时。理解此算法最好找一棵简单的树跟着程序走一遍,在纸上画出栈的进栈、出栈情况。

void printTreePreOrder2(BinaryNode *t) const {stack<BinaryNode*> stackNode;BinaryNode *pnode = t;while(pnode != NULL || !stackNode.empty()){while (pnode != NULL){cout << pnode->element << "  ";stackNode.push(pnode);pnode = pnode->left;}if(!stackNode.empty()){pnode = stackNode.top();stackNode.pop();pnode = pnode->right;}}}


非递归 中序

中序遍历和先序遍历类似,只是访问结点值是在出栈的时候,而先序遍历是在进栈的时候。

void printTreeInorder2(BinaryNode *t) const{stack<BinaryNode*> stackNode;BinaryNode *pnode = t;while(pnode != NULL || !stackNode.empty()){while(pnode != NULL){stackNode.push(pnode);pnode = pnode->left;}if(!stackNode.empty()){pnode = stackNode.top();cout << pnode->element << "  ";stackNode.pop();pnode= pnode->right;}}}


非递归后序

后序遍历

void printTreePostOrder3(BinaryNode *t) const{BinaryNode *p = t;BinaryNode *temp = NULL;BinaryNode *pre = NULL;if (p == NULL){cout << "empty " << endl;}stack<BinaryNode*> s;while(p != NULL || !s.empty()){while (p != NULL){s.push(p);p = p->left;}if (!s.empty()){temp = s.top();if(temp->right == NULL || temp->right == pre) //若果没有 右子叶或者 右子叶已经访问过{cout << temp->element << "  ";s.pop();pre = temp;p = NULL;}else{p = temp->right;}}}}

和先序、中序类似,但要稍复杂一点,需要判断结点是否有右孩子和右孩子是否访问过。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 施工挖断军用光缆怎么办 不小心挖断光缆怎么办 家里的光纤断了怎么办 车被树枝刮花了怎么办 货车撞断了树枝怎么办? 把光缆挖断了怎么办 光缆有外伤断了怎么办 不小心挖断移动光缆怎么办 派克服内胆掉毛怎么办 汉王电纸书怎么无法开机怎么办? 压力喷水壶坏了怎么办 行车记录仪后摄像头不清楚怎么办 蓝牙听歌声音小怎么办 对讲机时灵时不灵怎么办 黑凉粉煮稀了怎么办 轮速传感器坏了怎么办 黑魂3被入侵了怎么办 轮胎螺丝滑牙了怎么办 gta5ol寻宝任务退出了怎么办 gta5线上模式买房子之后怎么办 开摩托车忘记带安全头盔怎么办 gta不想要车了怎么办 空气滤芯进水会怎么办 车胎扎了个钉子怎么办 德罗索没导弹了怎么办 CF手雷包不能用怎么办 cfAK爆头碰到狙怎么办 玩cf网络延迟高怎么办 逆水寒装备分解错了怎么办 轴与孔间隙过大怎么办 小孩眼睛被打了怎么办 玩王者荣耀手机屏幕竖着怎么办 棉被被老鼠尿湿怎么办 打完子弹能下来怎么办 怪物猎人 弩子弹打完了怎么办 烤瓷牙龈发黑了怎么办 做彩超前喝水了怎么办 胸贴过敏红痒怎么办 芡粉里面有虫了怎么办 勾芡淀粉放多了怎么办 剁排骨没有好刀怎么办