二叉树的遍历

来源:互联网 发布:python 盲水印 编辑:程序博客网 时间:2024/05/16 14:19

二叉树的遍历分前序、中序、和后序。下面分别给出代码:

首先定义二叉树:

typedef struct BiTNode{char data;BiTNode  *lChild, *rChild;}BiTNode, *BiTree;

这里用二叉链表存储二叉树

前序:

void preOrder(BiTree T){//前序if(T){putchar(T->data);preOrder(T->lChild);preOrder(T->rChild);}}

前序 非递归版:

void preOrder2(BiTree T){//前序 非递归版 stack<BiTree>s;BiTree p = T;while(p || !s.empty()){if(p){putchar(p->data);s.push(p);p = p->lChild;}else{//printf("%d %c\n", s.size(), s.top()->data);p = s.top();s.pop();p = p->rChild;}}}


中序:

void inOrder(BiTree T){//中序if(T){inOrder(T->lChild);putchar(T->data);inOrder(T->rChild);}}

中序 非递归版:

void inOrder2(BiTree T){//中序 非递归版stack<BiTree>s;BiTree p = T;while(p || !s.empty()){if(p){s.push(p);p = p->lChild;}else{p = s.top();s.pop();putchar(p->data);p = p->rChild;}}}



后序:

void postOrder(BiTree T){//后序if(T){postOrder(T->lChild);postOrder(T->rChild);putchar(T->data);}} 

后序 非递归版:

void postOrder2(BiTree T){//后序 非递归版stack<BiTree>s;BiTree p = T;BiTree r = NULL;while(p || !s.empty()){if(p){s.push(p);p = p->lChild;}else{p = s.top();if(p->rChild && p->rChild != r){p = p->rChild;s.push(p);p = p->lChild;}else{s.pop();putchar(p->data);r = p;p = NULL;}}}}

层次遍历:

void levelOrder(BiTree T){//层次遍历if(T == NULL)return ;queue<BiTree>q;BiTree p = T;q.push(p);while(!q.empty()){p = q.front();q.pop();putchar(p->data);if(p->lChild)q.push(p->lChild);if(p->rChild)q.push(p->rChild);}}


0 0