c二叉树遍历--二叉链表递归实现

本文介绍了一种使用C语言实现二叉树的先序、中序和后序遍历的方法,并提供了完整的代码示例。通过创建节点并构建特定结构的二叉树,演示了不同遍历方式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <stdlib.h>
typedef struct treeNode* Node;
typedef struct treeNode Elem;
struct treeNode{
Node lChild,rChild;
int data;
};

typedef Node BTree;

void preOrderBTree(BTree tree);
void inOrderBTree(BTree tree);
void postOrderBTree(BTree tree);

void visitNode(Node node){
if(node == NULL){
printf("node is null , data not exists");
}
printf("%d \t\t",node->data);
}

void createNode(Node* node,int data){
*node = (Node)malloc(sizeof(Elem));
(*node)->data= data;
(*node)->lChild = NULL;
(*node)->rChild = NULL;
}

void preOrderBTree(BTree tree){
if(tree != NULL){
visitNode(tree); //1.访问左节点
preOrderBTree(tree->lChild);//2.递归访问左子树
preOrderBTree(tree->rChild);//3.递归访问右子树
}
}

void inOrderBTree(BTree tree){
if(tree != NULL){
inOrderBTree(tree->lChild);//1.递归访问左子树
visitNode(tree); //2.访问左节点
inOrderBTree(tree->rChild);//3.递归访问右子树
}
}

void postOrderBTree(BTree tree){
if(tree != NULL){
postOrderBTree(tree->lChild);//1.递归访问左子树
postOrderBTree(tree->rChild);//2.递归访问右子树
visitNode(tree); //3.访问左节点
}
}


void main(){
//构建二叉树
BTree tree = NULL;
Node node1 = NULL;
Node node2 = NULL;
Node node3 = NULL;
Node node4 = NULL;
Node node5 = NULL;
Node node6 = NULL;
Node node7 = NULL;
Node node8 = NULL;
Node node9 = NULL;
Node node10 = NULL;
//初始化节点
createNode(&node1,2);
createNode(&node2,1);
createNode(&node3,3);
createNode(&node4,5);
createNode(&node5,8);
createNode(&node6,10);
createNode(&node7,2);
createNode(&node8,100);
createNode(&node9,20);
createNode(&node10,25);

//按照预定结构组装成书
node6->lChild = node9;
node6->rChild = node10;
node4->lChild = node7;
node5->rChild = node8;
node2->lChild = node4;
node2->rChild = node5;
node3->rChild = node6;
node1->lChild = node2;
node1->rChild = node3;
tree = node1;

//先序遍历
preOrderBTree(tree);
printf("\n===============================================================\n");
//后序遍历
postOrderBTree(tree);
printf("\n===============================================================\n");
//中序遍历
inOrderBTree(tree);
//层级遍历
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值