14黑马笔记之二叉树的递归遍历
1 思想: 将二叉树的根节点传进去,再递归遍历左右子树。递归条件:传进的节点不为空。即if(root==NULL)就返回。
2 递归遍历二叉树的方式有三种: 分为前序遍历,中序遍历,后序遍历。
3 例子:
具体代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义二叉树节点
typedef struct BINARYNODE{
char ch;
struct BINARYNODE *lchild; //左节点
struct BINARYNODE *rchild; //右节点
}BinaryNode;
//DLR-LDR-LRD前序中序后序的递归遍历
int BinaryRecursion(BinaryNode *root){
//递归的条件
//任何一个节点作为根节点时,为空就返回,证明到尽头了
if(root==NULL){
return -1;
}
/*
//前序递归遍历-- ABCDEFGH
//先访问输出根节点
printf("%c",root->ch);
//再遍历左子树
BinaryRecursion(root->lchild);
//最后右子树
BinaryRecursion(root->rchild);
//中序递归遍历-- BDCEAFGH
//先遍历左子树
BinaryRecursion(root->lchild);
//再输出相应的左子树节点
printf("%c",root->ch);
//最后右子树
BinaryRecursion(root->rchild);
*/
//后序递归遍历-- DECBHGFA
//先遍历左子树
BinaryRecursion(root->lchild);
//再右子树
BinaryRecursion(root->rchild);
//最后输出相应的左子树节点
printf("%c",root->ch);
return 0;
}
void CreateBinartTree(){
//创建数据节点
BinaryNode node1={'A',NULL,NULL};
BinaryNode node2={'B',NULL,NULL};
BinaryNode node3={'C',NULL,NULL};
BinaryNode node4={'D',NULL,NULL};
BinaryNode node5={'E',NULL,NULL};
BinaryNode node6={'F',NULL,NULL};
BinaryNode node7={'G',NULL,NULL};
BinaryNode node8={'H',NULL,NULL};
//建立节点关系 A-F-G-H
// \B
// \C-E
// \D
node1.lchild=&node2;
node1.rchild=&node6;
node2.rchild=&node3;
node3.lchild=&node4;
node3.rchild=&node5;
node6.rchild=&node7;
node7.rchild=&node8;
//递归遍历
BinaryRecursion(&node1);
printf("\n");
}
int main(){
CreateBinartTree();
return 0;
}