二叉树初步理解

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

二叉树初步:

代码如下,注释很详细。文章来源地址https://www.toymoban.com/news/detail-746242.html

#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iomanip>
#include <ctype.h>
#include <ctime>
#include <stack>
#include <list>
#include <queue>
#include <algorithm>
using namespace std;

//利用结构体去保存每一个节点的各个数据(节点数据、创建左右节点)
typedef struct treeNode//typedef重命名去简化每一次创建结构体时的操作
{
	char data;//节点数据
	struct treeNode* LChild;//创建左子树
	struct treeNode* RChild;//创建右子树
}TREE,*LPTREE;//将创建结构体命名为TREE,创建结构体指针重命名为LPTREE

//创建新节点的函数。(输入新节点的数据)
LPTREE creatNode(char data)
{
	//malloc()函数分配内存空间
	//sizeof(LPTREE)大小为LPTREE的内存空间
	//整个含义:
	//分配一个LPTREE类型大小的数据空间给newNode
	LPTREE newNode = (LPTREE)malloc(sizeof(TREE));
	newNode->data = data;//将新节点的数据输入
	newNode->LChild = NULL;//将左子树和右子树初始化为空
	newNode->RChild = NULL;
	return newNode;//返回数据
}

//插入数据的函数。(完善一个节点左右子树的信息)-做链接
void insertNode(LPTREE parentNode, LPTREE LChild, LPTREE RChild)
{
	parentNode->LChild = LChild;//父节点的左边赋值左节点
	parentNode->RChild = RChild;//父节点的右边赋值右节点
}

//创建一个打印函数
void printCurNodeData(LPTREE curData)
{
	cout << curData->data << "    ";
}
																				
//递归法遍历
//先序
void preOrder(LPTREE root)//输入节点
{
	if (root != NULL)
	{
		printCurNodeData(root);//打印根部
		preOrder(root->LChild);//递归打印左子树
		preOrder(root->RChild);//同上
	}
}
//中序
void midOrder(LPTREE root)//输入节点
{
	if (root != NULL)
	{
		preOrder(root->LChild);//递归打印左子树
		printCurNodeData(root);//打印根部
		preOrder(root->RChild);//同上
	}
}
//后序
void lastOrder(LPTREE root)//输入节点
{
	if (root != NULL)
	{
		preOrder(root->LChild);//递归打印左子树
		preOrder(root->RChild);//同上
		printCurNodeData(root);//打印根部
	}
}

int main()
{
	//创建A-G节点
	LPTREE A = creatNode('A');
	LPTREE B = creatNode('B');
	LPTREE C = creatNode('C');
	LPTREE D = creatNode('D');
	LPTREE E = creatNode('E');
	LPTREE F = creatNode('F');
	LPTREE G = creatNode('G');
	//建立连接
	insertNode(A, B, C);
	insertNode(B, D, NULL);
	insertNode(D, NULL, G);
	insertNode(C, E, F);

	cout << "先序遍历" << endl;
	preOrder(A);
	cout << endl;
	cout << "中序遍历" << endl;
	midOrder(A);
	cout << endl;
	cout << "后序遍历" << endl;
	lastOrder(A);
	cout << endl;

	return 0;
}

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

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

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

相关文章

  • 代码随想录二刷 |二叉树 | 二叉树的右视图

    199.二叉树的右视图 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出: [1,3] 示例 3: 输入: [] 输出: [] 提示: 二叉树的节点个数的范围是 [0,1

    2024年02月04日
    浏览(61)
  • 深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度

    看这篇前请先把我上一篇了解一下:深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客 前言: 相信很多学习数据结构的人,都会遇到一种情况,就是明明最一开始学习就学习了时间复杂度,但是在后期自己写的程序或者是做到哪个需要判断时间复杂度的题时,仍然判

    2024年04月09日
    浏览(45)
  • 【数据结构】二叉树的销毁 & 二叉树系列所有源代码(终章)

    目录 一,二叉树的销毁  二,二叉树系列所有源代码 BTee.h BTee.c Queue.h Queue.c 二叉树建好了,利用完了,也该把申请的动态内存空间给释放了,那要如何释放呢? 我们还是以这棵树为例, 要把这棵树销毁掉,其实就是把树上的结点全部释放掉 ,但是呢这个 释放的顺序挺讲究

    2024年02月08日
    浏览(47)
  • 代码随想录day13 | 226.翻转二叉树 101.对称二叉树

    使用前、后序反转最为方便。 为啥不推荐中序? 中序遍历,某些节点的左右孩子会翻转两次,某些节点左右孩子不会被反转。 101.对称二叉树 关键在于,看这个节点对应的左子树和右子树是否可以相互反转。 1、如何比较呢? 比较的是两个子树的里侧和外侧的元素是否相等

    2024年02月15日
    浏览(39)
  • [代码随想录]二叉树

    二叉树可以链式存储,也可以顺序存储。 那么链式存储方式就用指针, 顺序存储的方式就是用数组。 顾名思义就是顺序存储的元素在内存是连续分布的,而链式存储则是通过指针把分布在各个地址的节点串联一起。 链式存储如图: 链式存储是大家很熟悉的一种方式,那么

    2024年02月03日
    浏览(59)
  • 手撕二叉树(图解+代码)

    在学习二叉树之前,我们有必要了解一下树的概念和常用术语。接下来以下面这棵树为例来回顾下树相关概念: 树的概念:一种非线性的数据结构,由n(n =0)个节点组成的一个具有层次关系的集合。 树的术语: 节点的度 一个节点含有子树的个数,例如上图中A的度为6. 树的度

    2023年04月22日
    浏览(37)
  • 代码随想录Day12 二叉树 LeetCode T102二叉树的层序遍历 T226 翻转二叉树 T101 对称二叉树

    本文思路和详细讲解来自于:代码随想录 (programmercarl.com) 题目链接:102. 二叉树的层序遍历 - 力扣(LeetCode) 本题使用队列辅助完成,讲解主要函数CheckOrder:首先判断root是否为空,是就直接返回,然后创建队列,向里加入root元素,计算队列的长度,也就是每一层的元素个数,while循环,si

    2024年02月06日
    浏览(47)
  • 代码随想录day21(2)二叉树:二叉树的所有路径(leetcode257)

    题目要求:按任意顺序返回所有从根节点到叶节点的路径 思路:我们先递归地进行前序遍历,同时要注意回溯的过程,注意一些库的用法即可。 leetcode实战: 代码实现:

    2024年03月18日
    浏览(49)
  • 线索二叉树(图解+完整代码)

    目录 ⚽1.问题 🏐2.线索化 🏀 3.线索化带来的问题与解决 🥎4.完整代码 我们的二叉树学到现在,会产生两个问题: 在n个结点的二叉树中,必定有n+1个空链域(叶子结点的左右子树空间浪费了) 二叉树的遍历,无论是递归还是非递归算法,效率都不算高。 那我们能不能利用

    2024年02月03日
    浏览(43)
  • 【二叉树】大学有棵树叫高数,数据结构也有棵二叉树-代码详解

    普通二叉树增删查改没有什么价值,因为用来存数据,太复杂了 价值体现 1.搜索二叉树(最多查找高度次) ,平衡搜索二叉树,ALV树 红黑树 B 树 -最坏情况O(N) 2.哈夫曼树 二叉树结构 以存放字符为例子 快速构建一颗二叉树 树的结构 前序遍历 前序遍历(Preorder Traversal 亦称先序遍

    2023年04月08日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包