二叉树中的三种遍历方式
对于二叉树:
的几种遍历方式
1、先序遍历:先序遍历是先输出根节点,再输出左子树,最后输出右子树。上图的先序遍历结果就是:ABCDEF
2、中序遍历:中序遍历是先输出左子树,再输出根节点,最后输出右子树。上图的中序遍历结果就是:CBDAEF
3、后序遍历:后序遍历是先输出左子树,再输出右子树,最后输出根节点。上图的后序遍历结果就是:CDBFEA
#include <stdio.h> #include <stdlib.h> typedef char TelemType; typedef struct TNode{ TelemType data; struct TNode *lchild,*rchild; } BitNode; //声明 BitNode* createTree(void); void preOrderTraverse(BitNode *); void inOrderTraverse(BitNode *); void lastOrderTraverse(BitNode *); int main(int agrc,char *argv[]){ BitNode *root=NULL; root=createTree(); printf("\n先序遍历二叉树:"); preOrderTraverse(root); printf("\n中序遍历二叉树:"); inOrderTraverse(root); printf("\n后序遍历二叉树:"); lastOrderTraverse(root); return 0; } //创建二叉树 BitNode* createTree(void){ BitNode *b; TelemType ch; scanf("%c",&ch); if(ch=='#'){ b=NULL; }else{ b=(BitNode *)malloc(sizeof(BitNode)); b->data=ch; b->lchild=createTree(); b->rchild=createTree(); } return b; } //先序遍历 void preOrderTraverse(BitNode *root){ if(root){ printf("%c",root->data); preOrderTraverse(root->lchild); preOrderTraverse(root->rchild); } } //中序遍历 void inOrderTraverse(BitNode *root){ if(root){ inOrderTraverse(root->lchild); printf("%c",root->data); inOrderTraverse(root->rchild); } } //后序遍历 void lastOrderTraverse(BitNode *root){ if(root){ lastOrderTraverse(root->lchild); lastOrderTraverse(root->rchild); printf("%c",root->data); } }