IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> ??二叉树的创建(递归)和遍历?? -> 正文阅读

[数据结构与算法]??二叉树的创建(递归)和遍历??

二叉树的创建

二叉树的创建,是我们数据结构当中比较重要的部分,接下来我们学习一下二叉树的创建。

第一步:创建结点(节点)

? ? ? ? 结点的创建,我们一般是选择用结构体存放结点,以及结点的数据。

typedef struct treeNode
{
	char data;
	struct treeNode* lchild;//创建左结点
	struct treeNode* rchild;//创建右结点
}NODE, * LPNODE,*LPTREE;//结构体的别名

????????结构体创建结点的好处是便于我们利用指针或者链表进行数据的存放。

第二步:把数据变成结点

? ? ? ? 结点的创建是为了存放数据

LPNODE createNode(char data)
{
	LPNODE newNode = (LPNODE)malloc(sizeof(NODE));分配一个NODE类型大小的内存空间, 并把它赋给LPNODE型的变量:newNode,也是创建根结点
	newNode->data = data;
	newNode->lchild = NULL;//左结点的起始为空
	newNode->rchild = NULL;//右结点的起始为空
	return newNode;//返回根节点
}

第三步:创建树(递归创建)

//递归创建树
void createtree(LPTREE* root)
{
	char key;
	scanf("%c",&key);
	if(key=='#')
	{
		*root==NULL;
	}
	else
	{
		*root=(LPTREE)malloc(sizeof(NODE));//与上面的解释雷同
		(*root)->data=key;
		createtree(&(*root)->lchild);//递归为左子树结点赋值
		createtree(&(*root)->rchild);//递归为右子树结点赋值
	}
} 

第四步:遍历,遍历也分递归和非递归

????????递归遍历是有套路的,其实递归遍历的算法是一样的,但是就是输出语句的位置不同罢了,当然函数的名字也不能相同。

? ? ? ? (1)先序遍历

void preOrder(LPNODE root)
{
	if (root != NULL)
	{
		cout << root->data << " ";
		preOrder(root->lchild);
		preOrder(root->rchild);
	}
}

? ? ? ? ?(2)中序遍历

void midOrder(LPNODE root)
{
	if (root != NULL)
	{
		midOrder(root->lchild);
		cout << root->data << " ";
		midOrder(root->rchild);
	}
}

? ? ? ? (3)后序遍历

void lastOrder(LPNODE root)
{
	if (root != NULL)
	{
		lastOrder(root->lchild);
		lastOrder(root->rchild);
		cout << root->data << " ";
	}
}

第五步:主函数main编写

? ? ? ? 这里主要不输入数据了,用我们现成的数据。

int main()
{
	LPNODE A = createNode('A');
	LPNODE B = createNode('B');
	LPNODE C = createNode('C');
	LPNODE D = createNode('D');
	LPNODE E = createNode('E');
	LPNODE F = createNode('F');
	insertNode(A, B, C);//根左右均不为空
	insertNode(B, D, NULL);//根左不为空,右为空
	insertNode(C, E, NULL);//根左不为空,右为空
	insertNode(E, NULL, F);//根右不为空,左为空
	cout << "preOrder:\n";
	preOrder(A);

	cout << "\nmidOrder:\n";
	midOrder(A);

	cout << "\nlaseOrder:\n";
	lastOrder(A);

}

运行结果:

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 17:08:43  更:2021-10-01 17:09:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 16:12:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码