二叉树的遍历

来源:互联网 发布:python requests post 编辑:程序博客网 时间:2024/05/20 11:23

二叉树是面试中经常考到的题目,也是最能考察一个初级程序员的思维能力和逻辑能力,以及对指针掌握的能力。经常的二叉树题目分为两种:

    一、对二叉树进行前序遍历、中序遍历、后序遍历。

   二、对已经给出的二叉树的前序遍历和中序遍历或者给出的中序遍历和后序遍历求出二叉树,并进行遍历输出。

 

 

这里的二叉树的遍历主要是针对静态二叉树遍历来说的。二叉树的结构如下:

程序代码如下:

#include<stdio.h>#include<malloc.h>struct NodeBTree{char data;struct NodeBTree *pLchild;struct NodeBTree *pRchild;};struct NodeBTree* creat_BTree(void);void PreTraverseBTree(struct NodeBTree*);int main(){struct NodeBTree *PT = creat_BTree();PreTraverseBTree(PT);return 0;}struct NodeBTree* creat_BTree(void){struct NodeBTree *PA = (struct NodeBTree*)malloc(sizeof(struct NodeBTree));struct NodeBTree *PB = (struct NodeBTree*)malloc(sizeof(struct NodeBTree));struct NodeBTree *PC = (struct NodeBTree*)malloc(sizeof(struct NodeBTree));struct NodeBTree *PD = (struct NodeBTree*)malloc(sizeof(struct NodeBTree));struct NodeBTree *PE = (struct NodeBTree*)malloc(sizeof(struct NodeBTree));PA->data = 'A';PB->data = 'B';PC->data = 'C';PD->data = 'D';PE->data = 'E';PA->pLchild = PB;PA->pRchild = PC;PB->pLchild = PB->pRchild = NULL;PC->pLchild = PD;PC->pRchild = NULL;PD->pLchild = NULL;PD->pRchild = PE;PE->pLchild = PE->pRchild = NULL;return PA;}void PreTraverseBTree(struct NodeBTree* PT){if(PT != NULL){printf("%c\n",PT->data);if(PT->pLchild != NULL)PreTraverseBTree(PT->pLchild);if(PT->pRchild != NULL)PreTraverseBTree(PT->pRchild);}}

程序进行前序遍历的结果如下:

这是前序遍历的输出结果,中序遍历和后续遍历这是在遍历的顺序不同而已。

 

对于给出两种二叉树求出二叉树,通过一个例题来看吧。

前序遍历:ABDGHCEFI

中序遍历:GDHB  A ECIF

经过分析可以得出:在中序遍历的左边都是属于二叉树的左子树,A的右边是右子树。

所以后序遍历:GHDBEIFCA