二叉树基本运算算法实现

embedded/2024/10/17 21:13:56/

目录

核心代码

完整代码

示例


核心代码

//插入结点
node* insert(node *root,ElemType value){if(root==NULL){return createNode(value);//如果为空,创建新节点}if(value<root->data){//比结点小的放在左子,大的放在右子root->lchild=insert(root->lchild,value);}else if(value>root->data){root->rchild=insert(root->rchild,value);}return root;
}//查找节点
node* search(node *root,ElemType x){node *p;if(root==NULL){return NULL;}else if(root->data==x){return root;}else{p=search(root->lchild,x);if(p!=NULL){return p;}else{return search(root->rchild,x);}}
}//找左孩子结点
node* Lchild(node *root){return root->lchild;
}//找右孩子结点
node* Rchild(node *root){return root->rchild;
}//求二叉的高度
int High(node *root){int lchildh,rchildh;if(root==NULL){return(0);   //空的高度为0}else{lchildh=High(root->lchild);   //求左子的高度rchildh=High(root->rchild);   //求右子的高度return (lchildh>rchildh)?(lchildh+1):(rchildh+1);}
}
//先序遍历
void PreOrder(node *root){if(root!=NULL){printf("%d ",root->data);PreOrder(root->lchild);PreOrder(root->rchild);}
}//中序遍历
void InOrder(node *root){if(root!=NULL){InOrder(root->lchild);printf("%d ",root->data);InOrder(root->rchild);}
}//后序遍历
void PostOrder(node *root){if(root!=NULL){PostOrder(root->lchild);PostOrder(root->rchild);printf("%d ",root->data);}
}//销毁二叉
void Destroy(node *root){if(root!=NULL){Destroy(root->lchild);Destroy(root->rchild);free(root);}
}

完整代码

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;//定义二叉结点
typedef struct node
{ElemType data;           //数据元素struct node *lchild;     //指向左孩子struct node *rchild;     //指向右孩子
}node;//创建新结点
node* createNode(ElemType value){node *newNode=(node *)malloc(sizeof(node));newNode->data=value;newNode->lchild=NULL;newNode->rchild=NULL;return newNode;
}//插入结点
node* insert(node *root,ElemType value){if(root==NULL){return createNode(value);//如果为空,创建新节点}if(value<root->data){//比结点小的放在左子,大的放在右子root->lchild=insert(root->lchild,value);}else if(value>root->data){root->rchild=insert(root->rchild,value);}return root;
}//查找节点
node* search(node *root,ElemType x){node *p;if(root==NULL){return NULL;}else if(root->data==x){return root;}else{p=search(root->lchild,x);if(p!=NULL){return p;}else{return search(root->rchild,x);}}
}//找左孩子结点
node* Lchild(node *root){return root->lchild;
}//找右孩子结点
node* Rchild(node *root){return root->rchild;
}//求二叉的高度
int High(node *root){int lchildh,rchildh;if(root==NULL){return(0);   //空的高度为0}else{lchildh=High(root->lchild);   //求左子的高度rchildh=High(root->rchild);   //求右子的高度return (lchildh>rchildh)?(lchildh+1):(rchildh+1);}
}
//先序遍历
void PreOrder(node *root){if(root!=NULL){printf("%d ",root->data);PreOrder(root->lchild);PreOrder(root->rchild);}
}//中序遍历
void InOrder(node *root){if(root!=NULL){InOrder(root->lchild);printf("%d ",root->data);InOrder(root->rchild);}
}//后序遍历
void PostOrder(node *root){if(root!=NULL){PostOrder(root->lchild);PostOrder(root->rchild);printf("%d ",root->data);}
}//销毁二叉
void Destroy(node *root){if(root!=NULL){Destroy(root->lchild);Destroy(root->rchild);free(root);}
}
int main(){node *root=NULL;//插入结点root=insert(root,6);insert(root,3);insert(root,4);insert(root,5);insert(root,8);insert(root,7);//查找节点int value=4;node *foundnode=search(root,value);if(foundnode){printf("找到结点:%d\n",foundnode->data);}else{printf("未找到结点:%d\n",value);}//求二叉的高度int height=High(root);printf("二叉的高度:%d\n",height);//遍历二叉//先序遍历printf("先序遍历:");PreOrder(root);printf("\n");//中序遍历printf("中序遍历:");InOrder(root);printf("\n");//后序遍历printf("后序遍历:");PostOrder(root);printf("\n");//销毁二叉Destroy(root);return 0;}

示例

找到结点:4
二叉的高度:4
先序遍历:6 3 4 5 8 7
中序遍历:3 4 5 6 7 8
后序遍历:5 4 3 7 8 6


http://www.ppmy.cn/embedded/128269.html

相关文章

python从0快速上手(一)python环境搭建 windows macos linux

Python环境搭建超详细指南 Python是一种广泛使用的高级编程语言&#xff0c;它以其简洁的语法和强大的功能而受到开发者的喜爱。对于初学者来说&#xff0c;搭建一个合适的Python开发环境是开始Python之旅的第一步。本文将为你提供一个超级详细的Python环境搭建指南&#xff0…

2024 kali系统2024版本,可视化界面汉化教程(需要命令行更改),英文版切换为中文版,基于Debian创建的kali虚拟机

我的界面如下所示 1. 安装 locales sudo apt install locales 2. 生成中文语言环境 sudo locale-gen zh_CN.UTF-8 如果你希望安装繁体中文&#xff0c;可以加入&#xff1a; sudo locale-gen zh_TW.UTF-8 3. 修改 /etc/default/locale 文件 确保有以下内容 LANGzh_CN.UT…

《java主流的爬虫框架》

java主流的爬虫框架 本文主要介绍Java主流的爬虫框架 大家都知道&#xff0c;谈到爬虫技术&#xff0c;我们脑子里的第一反应肯定是python爬虫技术&#xff0c;但是需要注意的是&#xff0c;Java也同样可以实现爬虫&#xff0c;这篇文章就为大家介绍一下Java的主流的爬虫技术&…

高效管理学科竞赛:SpringBoot平台的创新应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理高校学科竞赛平台的相关信息成为必然。开发…

add_custom_command不执行解决

set(INPUT_FILE${CMAKE_CURRENT_LIST_DIR}/config.json) set(OUTPUT_FILE${CMAKE_CURRENT_LIST_DIR}/config_test.h)add_custom_command(OUTPUT "${OUTPUT_FILE}".................. )路径正确&#xff0c;但是add_custom_command就是不执行 加上add_executable(mai…

jquery实现点击菜单实现高德地图定位点与数据展示联动效果

&#x1f34a;jquery实现点击菜单实现高德地图定位点与数据展示联动效果 版本介绍&#xff1a; jQuery v3.7.1高德地图JS API 2.0 代码仓库 ⭐ Gitee&#xff1a; https://gitee.com/NewTea19/js-case/tree/master/3. 点击菜单实现高德地图定位点与数据展示联动效果/case 1.启动…

MySQL-三范式 视图

文章目录 三范式三范式简介第一范式第二范式第三范式 表设计一对一一对多多对多最终的设计 视图 三范式 三范式简介 所谓三范式, 其实是表设计的三大原则, 目的都是为了节省空间, 但是三范式是必须要遵守的吗? 答案是否定的(但是第一范式必须遵守) 因为有时候严格遵守三范式…

【顶刊核心变量】中国地级市绿色金融试点改革试验区名单数据(2010-2023年)

一、测算方式&#xff1a; 参考《中国工业经济》崔惠玉&#xff08;2023&#xff09;老师的研究&#xff0c;2017 年&#xff0c;国务院决定将浙江、广东、江西、贵州和新疆的部分地区作为绿色金融改革创新试验 区的首批试点地区。试点地区在顶层设计、组织体系、产品创新、配…