二叉树遍历的C语言完整实现(先、中、后序遍历)(含测试例子)

本文测试例子的二叉树
本文测试的二叉树例子

//successful achievement 


#include  <stdio.h>
#include <stdlib.h>
#include <string.h> 
#include <iostream>
using namespace std;




struct BinaryNode{
	char ch;	//显示字母 
	struct BinaryNode * lChild;		//左孩子 
	struct BinaryNode * rChild;		//右孩子 
};

//递归函数,实现遍历
void recursion_preorder_traversal(struct BinaryNode * root){
	//递归最重要的循环结束条件 
	if (root == NULL){   //碰到空就回退???大约07:08    代码在执行过程中,(小箭头)碰到空,就直接不管这行代码,不是说直接退出整个函数 
		return;
	}
	
	//先序遍历
	
	//先根 
	printf("%c\n", root->ch); 
	
	//再左 
	recursion_preorder_traversal (root->lChild);
	
	//再右
	recursion_preorder_traversal (root->rChild);
	
}

//inorder
void recursion_inorder_traversal(struct BinaryNode * root){
	if (root == NULL){
		return;
	} 
	
	recursion_inorder_traversal (root->lChild);
	printf("%c\n",root->ch);
	recursion_inorder_traversal (root->rChild);
	 
}


//postorder 
void recursion_postorder_traversal(struct BinaryNode * root){
	if (root == NULL){
		return;
	} 

	recursion_postorder_traversal (root->lChild);
	recursion_postorder_traversal (root->rChild);	
	printf("%c\n",root->ch);
}



void test01(){    //具体的树结构见文章开头
	//建立节点
	struct  BinaryNode nodeA = {'A', NULL, NULL };
	struct  BinaryNode nodeB = {'B', NULL, NULL };	
	struct  BinaryNode nodeC = {'C', NULL, NULL };	
	struct  BinaryNode nodeD = {'D', NULL, NULL };	
	struct  BinaryNode nodeE = {'E', NULL, NULL };	
	struct  BinaryNode nodeF = {'F', NULL, NULL };
	struct  BinaryNode nodeG = {'G', NULL, NULL };	
	struct  BinaryNode 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;
	
	
	//通过递归函数实现先序遍历
	
	cout<<"preorder is at list:"<<endl;
	recursion_preorder_traversal(&nodeA);
	cout<<endl;
	
	
	
	cout<<"inorder is at list:"<<endl;
	recursion_inorder_traversal(&nodeA);
	cout<<endl;	
	
	
	
	cout<<"postorder is at list:"<<endl;
	recursion_postorder_traversal(&nodeA);
	cout<<endl;
	
}



int main(){
	
	test01();	
	
	
	
	system("pause");
	return EXIT_SUCCESS; 
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值