非遞迴遍歷二叉樹的四種策略-先序、中序、後序和層序

鍾超發表於2009-11-14

遍歷二叉樹的遞迴演算法,是比較容易理解的,但是非遞迴的迴圈演算法不是很容易一眼看穿。下面的五個演算法是參考嚴蔚敏的《資料結構》和USTC的張昱老師的講義後,寫下來的,部分有改動。

先序遍歷二叉樹演算法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

相關文章