实现二叉树的各种基本运算的算法

这篇具有很好参考价值的文章主要介绍了实现二叉树的各种基本运算的算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的:领会二叉树的存储结构和掌握二叉树中各种基本运算算法的设计。

内容:编写一个程序btree.cpp,实现二叉树的各种基本运算,并在此基础上设计一个程序exp7-1.cpp完成以下功能。

  1. 由图7.1所示的二叉树创建对应的二叉链存储结构b,该二叉树的括号表示串为“A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”。
  2. 输出二叉树b。
  3. 输出‘H’结点的左、右孩子结点值。
  4. 输出二叉树b的高度。
  5. 释放二叉树b。

实现二叉树的各种基本运算的算法 编写一个程序btree.cpp,实现二叉树的各种基本运,数据结构,数据结构 

//计算机 小淇在敲代码  实现二叉树的各种基本运算的算法
#include<stdio.h>
#include<malloc.h>

#define MaxSize 100
typedef char ElemType;
typedef struct node
{
	ElemType data;          //数据元素
	struct node *lchild;    //指向左孩子结点
	struct node *rchild;    //指向右孩子结点
}BTNode;
//创建二叉树
void CreateBTree(BTNode *&b,char *str)
{
	BTNode *St[MaxSize],*p;
	int top=-1,k,j=0;char ch;
	b=NULL;
	ch=str[j];
	while(ch!='\0')
	{
		switch(ch)
		{
		case '(':top++;St[top]=p;k=1;break;
		case ')':top--;break;
		case ',':k=2;break;
		default:p=(BTNode *)malloc(sizeof(BTNode));
			p->data=ch;p->lchild=p->rchild=NULL;
			if(b==NULL)
				b=p;
			else
			{
				switch(k)
				{
				case 1:St[top]->lchild=p;break;
				case 2:St[top]->rchild=p;break;
				}
			}
		}
		j++;ch=str[j];
	}
}
//销毁二叉树
void DestroyBTree(BTNode *&b)
{
	if(b!=NULL)
	{
		DestroyBTree(b->lchild);
		DestroyBTree(b->rchild);
		free(b);
	}
}
//查找结点
BTNode *FindNode(BTNode *b,ElemType x)
{
	BTNode *p;
	if(b==NULL)
		return NULL;
	else if(b->data==x)
		return b;
	else
	{
		p=FindNode(b->lchild,x);
		if(p!=NULL)
			return p;
		else
			return FindNode(b->rchild,x);
	}
}
//找左孩子结点
BTNode *LchildNode(BTNode *p)
{
	return p->lchild;
}
//找右孩子结点
BTNode *RchildNode(BTNode *p)
{
	return p->rchild;
}
//求高度
int BTHeight(BTNode *b)
{
	int lchildh,rchildh;
	if(b==NULL)return(0);
	else
	{
		lchildh=BTHeight(b->lchild);
		rchildh=BTHeight(b->rchild);
		return (lchildh>rchildh)?(lchildh+1):(rchildh+1);
	}
}
//输出二叉树
void DispBTree(BTNode *b)
{
	if(b!=NULL)
	{
		printf("%c",b->data);
		if(b->lchild!=NULL||b->rchild!=NULL)
		{
			printf("(");
			DispBTree(b->lchild);
			if(b->rchild!=NULL)printf(",");
			DispBTree(b->rchild);
			printf(")");
		}
	}
}

//主函数
int main()
{
	BTNode *b,*p,*lp,*rp;
	printf("计算机 小淇在敲代码\n");
	printf("二叉树的基本运算如下:\n");
	printf("(1)创建二叉树\n");
	CreateBTree(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
	printf("(2)输出二叉树:");DispBTree(b);printf("\n");
	printf("(3)H结点:");
	p=FindNode(b,'H');
	if(p!=NULL)
	{
		lp=LchildNode(p);
		if(lp!=NULL)printf("左孩子: %c",lp->data);
		else printf("无左孩子");
		rp=RchildNode(p);
		if(rp!=NULL)printf("右孩子: %C",rp->data);
		else printf("");
	}
	printf("\n");
	printf("(4)二叉树b的高度:%d\n",BTHeight(b));
	printf("(5)释放二叉树b \n");
	DestroyBTree(b);
	return 1;
}

实现二叉树的各种基本运算的算法 编写一个程序btree.cpp,实现二叉树的各种基本运,数据结构,数据结构 

 文章来源地址https://www.toymoban.com/news/detail-758948.html

 

 

到了这里,关于实现二叉树的各种基本运算的算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】二叉树的存储与基本操作的实现

    二叉树的存储结构分为: 顺序存储 和类似于 链表的链式存储 这里博主讲一下链式存储 二叉树的链式存储是通过一个一个的节点引用起来的,常见的表示方式有 二叉和三叉 表示方式 二叉表示: 三叉表示: 这里博主主要讲解一下孩子表示法 在学习二叉树的基本操作前,需

    2024年02月04日
    浏览(46)
  • 数据结构 | 二叉树的各种遍历

    我们本章来实现二叉树的这些功能 Tree.h 我们先来几个简单的 直接手动个创建即可,很简单~~ 这里也是很简单,也可以看做下图这样遍历,或者画一下递归展开图 我们这里看一下递归展开图 为空就返回0 不是空,是叶子,返回1 不是空,也不是叶子,就递归左子树和右子树

    2024年02月04日
    浏览(38)
  • 二叉树的基本操作-C语言实现-数据结构作业

    目录  (1)二叉树的创建; (2)二叉树的先序、中序和后序遍历输出; (3)输出二叉树的叶子节点和度为2的节点的数量; (4)输出二叉树的深度; (5)将二叉树所有节点的左右子树互换(左子树变右子树,右子树变左子树); (6)参考书上,二叉树按层次输出(一行输出一层); (7)删除二

    2024年02月04日
    浏览(46)
  • 【数据结构和算法15】二叉树的实现

    二叉树是这么一种树状结构:每个节点最多有两个孩子,左孩子和右孩子 重要的二叉树结构 完全二叉树(complete binary tree)是一种二叉树结构,除最后一层以外,每一层都必须填满,填充时要遵从先左后右 平衡二叉树(balance binary tree)是一种二叉树结构,其中每个节点的左

    2024年02月16日
    浏览(34)
  • 算法练习第13天|递归实现 144.二叉树的前序遍历(opens new window)145.二叉树的后序遍历(opens new window)94.二叉树的中序遍历

    二叉树的存储方式:链式存储和顺序存储。链式存储用指针,顺序存储用数组。其结构如下图所示。 链式存储: 顺序存储: 顺序存储时,若父节点下表为i,则其左孩子下标为 2*i + 1,右孩子下标为2*i + 2. 二叉树主要有两种遍历方式: 深度优先遍历:先往深走,遇到叶子节点

    2024年02月22日
    浏览(51)
  • 算法leetcode|94. 二叉树的中序遍历(多语言实现)

    给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 树中节点数目在范围 [0, 100] 内 -100 = Node.val = 100 面对这道算法题目,二当家的再次陷入了沉思。 二叉树的中序遍历和前序遍历,后续遍历是二叉树常用的遍历方式。 使用递归方式比循环非递归方式更加简单,直观,易于

    2024年02月04日
    浏览(42)
  • 【数据结构】树,二叉树,满二叉树,完全二叉树的定义和二叉树的基本操作

    🎊专栏【数据结构】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 ⭐树 🏳️‍🌈定义  🏳️‍🌈注意 🍔树的基本术语 ⭐二叉树 🏳️‍🌈定义 🎆二叉树和树的区别 🏳️‍🌈二叉树

    2024年02月05日
    浏览(66)
  • 实现环形队列的各种基本运算的算法

    目的: 领会环形队列的存储结构和掌握环形队列中各种基本运算算法的设计。 内容: 编写一个乘成sqqueue.cpp,实现环形队列(假设栈中的元素类型ElemType为char)的各种基本运算,并在此基础上设计一个程序3-3.cpp完成以下功能。 初始化队列q。 判断队列q是否非空。 依次进队

    2024年02月06日
    浏览(33)
  • 数据结构与算法—二叉树数组表示(ArrayBinTree)、二叉树的链式表示(LinkedBinTree)的基于C++模板代码实现

    1、二叉树的顺序表示:ArrayBinTree.h 二叉树的顺序表示法操作方便,但缺点是容易造成存储空间浪费。 这是一个用数组实现的二叉树类模板。它可以创建一个空树,也可以在指定的位置插入结点并设置结点的值,可以删除子树,并支持逐层遍历。使用该类时,需要提供一个元

    2024年02月06日
    浏览(41)
  • 【二叉树的基本功能】

    根据需求,创建一棵满足条件的二叉树,创建方法可以有多种 求树的节点总个数 后序遍历的思想: 分治算法,先求左子树节点个数,再求右子树节点个数,再+1,这个+1就是加上自己 求整棵树的高度 后序遍历的思想:先求左子树的高度,再求右子树的高度 比较左右子树的高

    2023年04月16日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包