递归相当于你用一把钥匙开门,开了一扇之后发现还可以开第二扇,发现可以一直开,直到前面有一扇打不开的们的时候,那么我就从最后一扇走回到第一扇。
遍历是什么
就是把描述的每个结点都走一遍,然后每个结点都不能重复。
树的遍历原则一定是先左后右。
二叉树的遍历分为三种:
DLR,LDR,LRD
其中D是根节点,L是左孩子结点,R是右孩子结点)
原则:只要碰到树,就往下走
举例:
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct BIMARYNODE
{
char ch;//数据域
struct BIMARYNODE *lChild;//左孩子结点
struct BIMARYNODE *rChild;//右孩子结点
}BimayNode;
//递归函数
void recursion(BimayNode *root)
{
if(root==NULL)
{
return;
}
//先序遍历
printf("%c",root->ch);
recursion(root->lChild);
recursion(root->rChild);
}
void test()
{
BimayNode nodeA={'A',NULL,NULL};
BimayNode nodeB={'B',NULL,NULL};
BimayNode nodeC={'C',NULL,NULL};
BimayNode nodeD={'D',NULL,NULL};
BimayNode nodeE={'E',NULL,NULL};
BimayNode nodeF={'F',NULL,NULL};
BimayNode nodeG={'G',NULL,NULL};
BimayNode nodeH={'H',NULL,NULL};
//建立结点之间的关系
nodeA.lChild = &nodeB;
nodeA.rChild = &nodeF;
nodeB.rChild = &nodeC;
nodeC.lChild = &nodeD;
nodeC.rChild = &nodeE;
nodeF.rChild = &nodeG;
nodeG.lChild = &nodeH;
recursion(&nodeA);
}
void main()
{
test();
printf("\n");
system("pause");
}
效果展示: