二叉树的遍历及实现

简介:
树是一种非线性的二维数据结构。

    这里要说的是一种特殊的二叉树,叫对分查找树。特点在于:左子树的所有值都比根节点小,右子树的所有值都比根节点大。

    对分查找树的三种遍历:

    中序遍历(inOrder)        遍历左子树;处理节点中的值;遍历右子树。

    前序遍历(preOrder)     处理节点中的值;遍历左子树;遍历右子树。

    后序遍历(postOrder)   遍历左子树;遍历右子树;处理节点中的值。

注意的是,对分查找树中序遍历的结果是对数列进行升序排列。因此中序遍历又叫二叉树排序。

   下面的程序说明对分查找树的生成和三种遍历的实现。

/*author:zhanglin*/

#include
#include
#include .h>.h>.h>

struct treeNode{
 struct treeNode *leftPtr;
 int data;
 struct treeNode *rightPtr;
};

typedef struct treeNode TreeNode;
typedef TreeNode *TreeNodePtr;

void insertNode(TreeNodePtr *, int);
void inOrder(TreeNodePtr);
void preOrder(TreeNodePtr);
void postOrder(TreeNodePtr);

int main(){
 int i, item;
 TreeNodePtr rootPtr= NULL;

 srand(time(NULL));

 /*insert random values between 1 and 15 in the tree*/
 printf("the number being placed in the tree are:\n");
 for(i=0; i<10;i++){
  item = rand()%15;
  printf("%3d", item);
  insertNode(&rootPtr, item);
 }

 /*traverse the tree in inOrder*/
 printf("\ntraverse the tree in inOrder\n");
 inOrder(rootPtr);

 /*traverse the tree in preOrder*/
 printf("\ntraverse the tree in preOrder\n");
 preOrder(rootPtr);

 /*traverse the tree in postOrder*/
 printf("\ntraverse the tree in postOrder\n");
 postOrder(rootPtr);

 return 0;

}

void insertNode(TreeNodePtr *ptr, int value){
 if(*ptr==NULL){
  *ptr = (TreeNodePtr)malloc(sizeof(TreeNode));

  if(*ptr!=NULL){
            (*ptr)->data = value;
   (*ptr)->leftPtr = NULL;
   (*ptr)->rightPtr = NULL;
  }else{
   printf("\nerror. No memory available\n");
  }
 }else{
  if(value<(*ptr)->data){
   insertNode(&((*ptr)->leftPtr), value);
  }else if(value>(*ptr)->data){
            insertNode(&((*ptr)->rightPtr), value);
  }else{
            printf("\nduplicate data\n");
  }
 }
}

void inOrder(TreeNodePtr ptr){
 if(ptr!=NULL){
   inOrder(ptr->leftPtr);
   printf("%3d", ptr->data);
   inOrder(ptr->rightPtr);
 }
}

void preOrder(TreeNodePtr ptr){
 if(ptr!=NULL){
   printf("%3d", ptr->data);
   preOrder(ptr->leftPtr);
   preOrder(ptr->rightPtr);
 }
}

void postOrder(TreeNodePtr ptr){
 if(ptr!=NULL){
   postOrder(ptr->leftPtr);
   postOrder(ptr->rightPtr);
   printf("%3d", ptr->data);
 }
}

专注于企业信息化,最近对股票数据分析较为感兴趣,可免费分享股票个股主力资金实时变化趋势分析工具,股票交流QQ群:457394862
分类: C/C++

本文转自沧海-重庆博客园博客,原文链接:http://www.cnblogs.com/omygod/archive/2006/11/08/554699.html,如需转载请自行联系原作者
目录
相关文章
|
Kubernetes 监控 Cloud Native
首批+最佳!阿里云云原生以最高分通过6项可信云测评认证
在2021年可信云大会中,中国信通院公布了多项可信云认证的评估结果。阿里云原生在可信云最佳实践中斩获三项大奖,在专业能力测评中更是拿到了一系列首批通过的先进级认证!
|
缓存 负载均衡 网络协议
自己动手从0开始实现一个分布式RPC框架
如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异步调用、熔断降级等技术,可以全方位的提升基本素质。虽然也有相关源码,但是只看源码容易眼高手低,动手写一个才是自己真正掌握这门技术的最优路径。
自己动手从0开始实现一个分布式RPC框架
|
9月前
|
人工智能 监控 测试技术
云上AI推理平台全掌握 (1):PAI-EAS LLM服务一键压测
在AI技术飞速发展的今天,大语言模型(LLM)、多模态模型等前沿技术正深刻改变行业格局。推理服务是大模型从“实验室突破”走向“产业级应用”的必要环节,需直面高并发流量洪峰、低延时响应诉求、异构硬件优化适配、成本精准控制等复杂挑战。 阿里云人工智能平台 PAI 致力于为用户提供全栈式、高可用的推理服务能力。在本系列技术专题中,我们将围绕分布式推理架构、Serverless 弹性资源全球调度、压测调优和服务可观测等关键技术方向,展现 PAI 平台在推理服务侧的产品能力,助力企业和开发者在 AI 时代抢占先机,让我们一起探索云上 AI 推理的无限可能,释放大模型的真正价值!
|
前端开发 JavaScript
如何使用CSS过渡实现页面元素的淡入淡出效果?
如何使用CSS过渡实现页面元素的淡入淡出效果?
562 79
|
人工智能 IDE 大数据
富滇银行研发管理从数字化走向智能化 | 通义灵码企业标杆案例
近年来,富滇银行以打造本土优秀数字化银行为目标,努力通过数字技术实现规模、质量、效益全方位的高质量发展。自2021年5月富滇银行数字化转型全面启动以来,凭借其模式创新、数字化成熟度、市场影响力和社会价值,“滇峰计划”斩获18项重磅奖项,涵盖金融创新、手机银行、云计算、大数据和ESG等领域,并入选多个国内数字化转型权威案例库。
558 35
|
设计模式 Java Go
【再谈设计模式】状态模式~对象行为的状态驱动者
状态模式属于行为型设计模式。它将对象的行为封装在不同的状态类中,使得对象在不同的状态下表现出不同的行为。上下文(Context):这是一个包含状态对象的类,它定义了客户感兴趣的接口,并维护一个具体状态对象的引用。上下文将操作委托给当前的状态对象来处理。抽象状态(State):这是一个抽象类或者接口,它定义了一个特定状态下的行为接口。所有具体的状态类都实现这个接口。具体状态(Concrete State):这些是实现抽象状态接口的类,每个具体状态类实现了与该状态相关的行为。
524 18
|
人工智能 测试技术 数据处理
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
527 11
|
存储 安全 区块链
篡改交易记录是如何防止的
篡改交易记录是如何防止的
|
Cloud Native 关系型数据库 分布式数据库
开发者如何使用云原生数据库PolarDB
【10月更文挑战第5天】开发者如何使用云原生数据库PolarDB
476 2
|
机器学习/深度学习 人工智能 并行计算
StableDiffusion-01本地服务器部署服务 10分钟上手 底显存 中等显存机器 加载模型测试效果 附带安装指令 多显卡 2070Super 8GB*2
StableDiffusion-01本地服务器部署服务 10分钟上手 底显存 中等显存机器 加载模型测试效果 附带安装指令 多显卡 2070Super 8GB*2
372 0

热门文章

最新文章