本文主要是介绍二叉树的遍历(先序,中序,后序,层次遍历),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先序遍历(递归和非递归):
#include <BiTree.c>
#include <SqStack.c>
#include <stdio.h>void PreOder(BiTree T) {if (T != NULL) {visit(T);PreOder(T->lchild);PreOder(T->rchild);}
}void PreOrder2(BiTree T) {InitStack(S);BiTree p = T;while (p || !IsEmpty(S)) {if (p) {visit(p);Push(S, p);p = p->lchild;}else {Pop(S, p);p = p->rchild;}}
}
中序遍历(递归和非递归):
#include <BiTree.c>
#include <SqStack.c>
#include <stdio.h>void InOrder(BiTree T) {if (T != NULL) {InOrder(T->lchild);visit(T);InOrder(T->rchild);}
}void InOrder2(BiTree T) {InitStack(S);BiTree p = T;while (p || !IsEmpty(S)) {if (p) {Push(S, p);p = p->lchild;}else {Pop(S, p);visit(p);p = p->rchild;}}
}
后序遍历(递归):
#include <BiTree.c>
#include <SqStack.c>
#include <stdio.h>void PostOrder(BiTree T) {if (T != NULL) {PostOrder(T->lchild);PostOrder(T->rchild);visit(T);}
}
层次遍历:
#include <BiTree.c>
#include <SqQueue.c>
#include <stdio.h>void LevelOrder(BiTree T) {InitQueue(Q);BiTree p;EnQueue(Q, T);while (!isEmpty(Q)) {DeQueue(Q, p);visit(p);if (p->lchild != NULL) {EnQueue(Q, p->lchild);}if (p->rchild != NULL) {EnQueue(Q, p->rchild);}}
}
这篇关于二叉树的遍历(先序,中序,后序,层次遍历)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!