非递归遍历二叉树的四种策略-先序、中序、后序和层序
2012-03-20 00:00
573 查看
遍历二叉树的递归算法,是比较容易理解的,但是非递归的循环算法不是很容易一眼看穿。下面的五个算法是参考严蔚敏的《数据结构》和USTC的张昱老师的讲义后,写下来的,部分有改动。
先序遍历二叉树算法1
先序遍历二叉树算法2
中序遍历二叉树算法
后序遍历二叉树算法
层序遍历二叉树算法
欢迎讨论、批评和指正!
ALex ZhonG
$(document).ready(function(){dp.SyntaxHighlighter.HighlightAll('code');});
原文链接:
http://blog.csdn.net/poechant/article/details/4811531
先序遍历二叉树算法1
// Copyright (c) 2009, ALex ZhonG. All rights reserved. Status PreOrderTraverse(BiTree T, Status (Visit *)(TElemType e)) { InitStack(S); Push(S, T); p = T;//或 GetTop(S, p); while(!StackEmpty(S) && p) { while(p) { if(!Visit(p->data)) return ERROR; Push(p->rchild); p = p->lchild; } Pop(S, p); } DestroyStack(S); return OK; }
先序遍历二叉树算法2
// Copyright (c) 2009, ALex ZhonG. All rights reserved. Status PreOrderTraverse(BiTree T, Status (Visit *)(TelemType)) { InitStack(S); Push(S, T); p = T; while(!StackEmpty(S) && p) { while(p) { if(!Visit(p->data)) return ERROR; Push(S, p); p = p->lchild; } if(!StackEmpty(S)) { Pop(S, p); p = p->rchild; } } DestroyStack(S); return OK; }
中序遍历二叉树算法
// Copyright (c) 2009, ALex ZhonG. All rights reserved. Status InOrderTraverse(BiTree T, Status (Visit *)(TelemType e)) { InitStack(S); Push(S, T)' p = T; while(!StackEmpty(S) && p) { while(p) { Push(S, p); p = p ->lchild; } Pop(S, p); if(!Visit(p->data)) return ERROR; p = p->rchild; } DestroyStack(S); return OK; }
后序遍历二叉树算法
// Copyright (c) 2009, ALex ZhonG. All rights reserved. Status PostOrderTraverse(BiTree T, Status (Visit *)(TelemType e)) { InitStack(S); Push(S, T); p = T; while(!StackEmpty(S) && p) { if(p) {//一直走到最左下的结点 Push(S, p); p = p->lchild; } else {//p为NULL时 GetTop(S, p); if(p->rchild && p->rchild != r) {//p有右孩子或p的右孩子不是刚刚被访问的 p = p->rchild; Push(S, p); p = p->lchild; } else {//p无右孩子或p右孩子刚刚被访问过时 Pop(S, p); Visit(p->data); r = p; p = NULL; } } } DestroyStack(S); return OK; }
层序遍历二叉树算法
// Copyright (c) 2009, ALex ZhonG. All rights reserved. Status LevelOrderTraverse(BiTree T, Status (Visit *)(TelemType e)) { InitQueue(Q); p = T; if(p) { if(!Visit(p->data) return ERROR; EnQueue(Q, p->lchild); EnQueue(Q, p->rchild); while(Q) { DeQueue(Q, p); if(!Visit(p->data)) return ERROR; if(p->lchild) EnQueue(Q, p->lchild); if(p->rchild) EnQueue(Q, p->rchild); } } return OK; }
欢迎讨论、批评和指正!
ALex ZhonG
$(document).ready(function(){dp.SyntaxHighlighter.HighlightAll('code');});
原文链接:
http://blog.csdn.net/poechant/article/details/4811531
相关文章推荐
- 非递归遍历二叉树的四种策略-先序、中序、后序和层序
- 非递归遍历二叉树的四种策略-先序、中序、后序和层序
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- 二叉树的遍历(前序,中序,后序,层序)--递归和非递归算法实现
- Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 非递归遍历二叉树(先序、中序、后序、层序)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- C++实现二叉树的递归遍历与非递归遍历(先序、中序、后序、层序)
- Java实现二叉树的递归构建及先序、中序、后序、层序遍历(递归和循环)
- 二叉树的遍历:前序、中序、后序、层序的非递归实现
- 二叉树的四种遍历方式 (前序,中序,后序,层序遍历 python实现)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 遍历二叉树(四种方式:前序、中序、后序、层序)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现