#include <stdio.h>
#include <stdlib.h>
typedef struct tree
{
	int number ;
	struct tree *left  ;
	struct tree *right ;
}TREE;
//对树插入节点
void insert_tree(TREE **header , int number)
{
    //创建一颗树
	TREE *New = NULL ;
	New = malloc(sizeof(TREE));
	if(NULL == New)
	   return ;
	//初始化树节点的值
	New->number = number ;
	//分别将左子树和右子树设置为空
	New->left = NULL ;
	New->right = NULL ;
	TREE **link = header ;
	TREE *cur ;
	while(cur = *link)
	{
        //判断新插入的节点和之前的值之间谁大谁小
        //小的就放在左子树,大的就放到右子树
		if(New->number < cur->number)
			//*link = cur->left ;
			link = &(cur->left) ;
		else
			link = &(cur->right) ;
	}
	*link = New ;
}
//打印树
void print_tree(TREE *header , int lever)
{
	if(header == NULL)
		return ; 

	print_tree(header->right , lever+1);
	int i ;
	for(i = 0 ; i < lever ; i++)
		printf("\t");
	printf("%d\n" , header->number);

	print_tree(header->left , lever+1);
}
//树的前序遍历
void front(TREE *header)
{
	if(header == NULL)
		return ;
	printf("%d " , header->number);
	front(header->left);
	front(header->right);
}
//树的中序遍历
void middle(TREE *header)
{
	if(header == NULL)
		return ;
	middle(header->left);
	printf("%d " , header->number);
	middle(header->right);
}
//树的后序遍历
void back(TREE *header)
{
	if(header == NULL)
		return ;
	back(header->left);
	back(header->right);
	printf("%d " , header->number);
}

int main(void)
{
    int i ;
    int buffer[10] ;
    TREE *header = NULL ;
    for(i = 0 ; i < 10 ; i++)
    {
        buffer[i] = rand()%100 ;
    }
    for(i = 0 ; i < 10 ; i++)
    {
        //给树插入元素
        insert_tree(&header , buffer[i]);
    }
    print_tree(header , 1);
    printf("\n前序遍历\n");
    front(header);
    printf("\n中序遍历\n");
    middle(header);
    printf("\n后序遍历\n");
    back(header);
    getchar();
}

数据结构-C语言递归实现树的前中后序遍历的更多相关文章

  1. [C++] 非递归实现前中后序遍历二叉树

    目录 前置技能 需求描述 binarytree.h 具体实现 binarytree.cpp main.cpp 网上代码一搜一大片,大同小异咯. 书上的函数实现代码甚至更胜一筹,而且抄一遍就能用,唯一问 ...

  2. C++二叉树前中后序遍历(递归&非递归)统一代码格式

    统一下二叉树的代码格式,递归和非递归都统一格式,方便记忆管理. 三种递归格式: 前序遍历: void PreOrder(TreeNode* root, vector<int>&pa ...

  3. Binary Tree Traversal 二叉树的前中后序遍历

    [抄题]:二叉树前序遍历 [思维问题]: 不会递归.三要素:下定义.拆分问题(eg root-root.left).终止条件 [一句话思路]: 节点非空时往左移,否则新取一个点 再往右移. [输入量] ...

  4. C语言二叉树的创建、(先中后序)遍历以及存在的问题

    #include<stdlib.h> #include<stdio.h> #define True 1 #define False 0 typedef char TElemTy ...

  5. POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)

    链接:poj.org/problem?id=2255 本文链接:http://www.cnblogs.com/Ash-ly/p/5463375.html 题意: 分别给你一个二叉树的前序遍历序列和中序 ...

  6. C++实现对树的创建和前中后序遍历

    #include<iostream>#include<stdio.h> using namespace std; class BitNode{ public: char dat ...

  7. 前中后序递归遍历树的体会 with Python

    前序:跟->左->右 中序:左->根->右 后序:左>右->根 采用递归遍历时,编译器/解释器负责将递归函数调用过程压入栈并保护现场,在不同位置处理根节点即可实现不 ...

  8. 二叉树前中后/层次遍历的递归与非递归形式(c++)

    /* 二叉树前中后/层次遍历的递归与非递归形式 */ //*************** void preOrder1(BinaryTreeNode* pRoot) { if(pRoot==NULL) ...

  9. Qt实现 动态化遍历二叉树(前中后层次遍历)

    binarytree.h 头文件 #ifndef LINKEDBINARYTREE_H #define LINKEDBINARYTREE_H #include<c++/algorithm> ...

随机推荐

  1. Python模块探秘 Smtplib发送带有各种附件的邮件

    这两天对Python的邮件模块比较感兴趣,于是就查了查资料.同时在实际的编码过程中也遇到了各种各样的问题.下面我就来分享一下我与smtplib的故事. 前提条件 我的上一篇博文里面讲解了,发送邮件必须 ...

  2. [ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试

    本文地址: http://blog.csdn.net/sushengmiyan/article/details/38479079 本文作者:sushengmiyan ----------------- ...

  3. 没想到你是这样的UDP

    UDP是国际标准化组织为互联网设定的标准中的传输层中的一个协议.TCP/IP协议簇是一个很庞大的家族,但是今天我们就来看一看这个面向无连接的传输层在Java中是怎样通过编程实现的. 原理性知识 在Ja ...

  4. 【安卓中的缓存策略系列】安卓缓存之内存缓存LruCache

    缓存策略在移动端设备上是非常重要的,尤其是在图片加载这个场景下,因为图片相对而言比较大会花费用户较多的流量,因此可用缓存方式来解决,即当程序第一次从网络上获取图片的时候,就将其缓存到存储设备上,这样在 ...

  5. python的u'字符串"(字符编码):字符串前有u,表示字符串以unicode格式存储

    举个例子 >>> s = u'\u6ce8\u91ca' >>> s u'\u6ce8\u91ca' >>> print s 注释 >> ...

  6. Linux上程序调试的基石(1)--ptrace

    引子: 1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_STOPPED等,还有一个TASK_TRACED.这表明这个进程处于什 ...

  7. 高斯函数 --> 高斯分布(正态分布)

    具有如下形式的函数就是高斯函数. 其中a,b,c都是实数常数,a大于0 .由于在博客中写数学公式比较麻烦,还是直接放照片吧. 字写的很难看,不过应该可以看清楚.:(

  8. UNIX/LINUX程序设计教程(1)-- 获取系统信息

          1.主机标识 每一台机器都有一个主机名,主机名由系统管理员指定,在网络中主机名可能是一个网络域名. 函数 gethostname() 和 sethostname() 可以用来获取和设置主机 ...

  9. cocos2d-x 3.0 播放MP4视频

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=545 很久以前写的一个2dx播放 ...

  10. Andriod Studio科普篇——4.关于编译的常见问题

    1.android支持库未安装 编译不过,提示如下: Could not find any version that matches com.android.support:appcompat-v7: ...