首页 > 其他分享 >数据结构 ——— 利用前序序列重建链式二叉树

数据结构 ——— 利用前序序列重建链式二叉树

时间:2024-11-14 19:19:39浏览次数:3  
标签:数据结构 前序 NULL BTNode 二叉树 链式 pi root

目录

题目要求

链式二叉树示意图​编辑

代码实现 


题目要求

读入用户输入的一串前序遍历的字符串,根据此字符串建立一个链式二叉树
例如前序遍历的字符串为:ABC##DE#G##F### ;其中 "#" 表示空树


链式二叉树示意图

以此图的链式二叉树为例子
那么此链式二叉树前序遍历转换为字符串是:"123###45##6##"


代码实现

实现前所需要的函数:

// 申请新节点
BTNode* BuyNode(BTDataType x)
{
	BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));

	// 判断是否申请成功
	if (newnode == NULL)
	{
		perror("malloc fail");
		return NULL;
	}

	// 初始化
	newnode->data = x;
	newnode->left = NULL;
	newnode->right = NULL;

	return newnode;
}

// 前序遍历
void PrevOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}

	// 根 -> 左子树 -> 右子树
	printf("%d ", root->data);
	PrevOrder(root->left);
	PrevOrder(root->right);
}

前序序列创建链式二叉树:

BTNode* CreateTree(char* a, int* pi)
{
	if (a[*pi] == '#')
	{
		(*pi)++;
		return NULL;
	}

	BTNode* root = BuyNode(a[*pi] - '0');
	(*pi)++;

	root->left = CreateTree(a, pi);
	root->right = CreateTree(a, pi);

	return root;
}

代码解析:

在前几章讲过,变量 i 在每个栈帧中都是独立的,所以不能传值,而是传址
第一个 if 语句用于判断是否是空,是空的话就返回空
再创建链式二叉树的节点,并且 pi++
且节点的左右子树就再次递归创建,根据判断字符串 a
最后返回 root 就是根节点的指针

代码验证:

标签:数据结构,前序,NULL,BTNode,二叉树,链式,pi,root
From: https://blog.csdn.net/weixin_55341642/article/details/143727055

相关文章

  • 97.【C语言】数据结构之栈
    目录栈1.基本概念2.提炼要点3.概念选择题4.栈的实现栈初始化函数入栈函数出栈函数和栈顶函数栈顶函数栈销毁函数栈基本概念参见王爽老师的《汇编语言第四版》第56和57页节选一部分1.基本概念2.提炼要点1.定义:一种特殊的线性表,其只允许在固定的一端进行......
  • 【新人系列】Python 入门(十):数据结构 - 下
    ✍个人博客:https://blog.csdn.net/Newin2020?type=blog......
  • SS241113C. 数据结构 (struct)
    SS241113C.数据结构(struct)题意有\(n\)个数,\(m\)个操作,\(n,m,a_i\le10^6\),每次操作给区间\([l,r]\)的所有数字加\(1\),然后输出全局颜色数量,操作独立。思路感觉不好想,对我来讲有点难,需要更聪明的脑袋和丰富的想象力。首先\(O(n\sqrt{n})\)的莫队做法是显然的,假设......
  • 力扣—543.二叉树的直径
    543.二叉树的直径给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取......
  • 数据结构——串的顺序存储实现
    概念:串(string):零个或多个任意字符组成的有限序列空串:(与空集合符号相同)子串:串中任意个连续字符组成的子序列称为该串的子串主串:包含子串的串相应地称为主串字符位置:字符在序列中的序号为该字符在串中的位置子串位置:子串第一个字符在主串中的位置空格串:由一个或多个空格组......
  • 代码随想录——二叉树17-路径总和
    这两道题目对于递归函数的返回值是不同的,这里进行总结,二叉树遍历中递归函数返回值何时有何时没有。这里总结如下三点:如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。(这种情况就是路径总和ii)如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需......
  • 【新人系列】Python 入门(九):数据结构 - 中
    ✍个人博客:https://blog.csdn.net/Newin2020?type=blog......
  • 力扣 653. 两数之和 IV 二叉树/binary-tree two-sum IV
    数组系列力扣数据结构之数组-00-概览力扣.53最大子数组和maximum-subarray力扣.128最长连续序列longest-consecutive-sequence力扣.1两数之和N种解法two-sum力扣.167两数之和IItwo-sum-ii力扣.170两数之和IIItwo-sum-iii力扣.653两数之和IVtwo-sum-IV力......
  • 单链表算法题(数据结构)
    1.反转链表https://leetcode.cn/problems/reverse-linked-list/description/题目:看到这个题目的时候我们怎么去想呢?如果我们反应快的话,应该可以想到我们可以从1遍历到5然后依次头插,但是其实我们还有更好的办法,就是利用三个指针,如何使用呢?反转链表OJ假如结构体已经给出t......
  • 数据结构复习——链、链栈。
    1、栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。2、栈的常见基本操作:InitStack(&S):初始化一个空栈S。StackEmpty(S):判断一个栈是否为空,若栈为空则返回true,否则返回false。Push(&S,x):进栈(栈的插入操作),若栈......