算法练习----力扣每日一题------3

原题链接

331. 验证二叉树的前序序列化 - 力扣(LeetCode)

题目解析

给一个字符串,判断它是否是一个二叉树的前序遍历.不同元素由逗号隔开,空节点用#字符代替.

递归解法

先假设每个元素都由一个字符构成(这样可以先不考虑烦人的多个字符情况)

在接口中调用一个递归函数

cpp 复制代码
//    preorder 原数组
//    pos 下标
//    ret    返回值
//    tmp    用来简单记录一下递归开始的位置
void fun(string& preorder, int& pos, bool& ret, bool tmp = false)

对于preorderpos处的递归判断来说

  1. pos下标不合法 ruturn
  2. preorderpos == '#' 空节点,不需要再往下执行,直接return
  3. preorderpos 是数字 调用两次fun检测左右子树
  4. preorderpos == ',' 按照假设这种情况有办法避免,可以不出现,不考虑

运行结束后,在递归执行的入口处如果pos等于数组长度-1,证明成立,否则不成立.

cpp 复制代码
void fun(string& preorder, int& pos, bool& ret, bool tmp = false)
{
	if (pos >= preorder.size())
	{
		ret = false;
		return;
	}
	if (preorder[pos] == '#')
		return;
	fun(preorder, pos += 2, ret);
	fun(preorder, pos += 2, ret);

	if (tmp == true && pos == preorder.size() - 1)
		ret = true;

}

将多字符元素转化成单子符元素,这个比较简单就不多说了

全部代码

cpp 复制代码
class Solution {
public:
	void fun(string& preorder, int& pos, bool& ret, bool tmp = false)
	{
		if (pos >= preorder.size())
		{
			ret = false;
			return;
		}
		if (preorder[pos] == '#')
			return;
		fun(preorder, pos += 2, ret);
		fun(preorder, pos += 2, ret);

		if (tmp == true && pos == preorder.size() - 1)
			ret = true;

	}
	bool fun2(char x)
	{
		return x >= '0' && x <= '9';
	}
	bool isValidSerialization(string preorder) {
		bool ret = false;
		int pos = 0;
		string tmp;
		if (preorder == "#")
			return true;
		char c1 = 0;
		for (auto e : preorder)
		{
			if (fun2(e) && fun2(c1))
				continue;
			else {
				tmp.push_back(e);
				c1 = e;
			}
		}
		fun(tmp, pos, ret, true);
		return ret;

	}
};

感谢观看!!!!!

相关推荐
想吃火锅100523 分钟前
【leetcode】56.合并区间js
算法·leetcode·职场和发展
imuliuliang26 分钟前
可合并堆在多任务调度中的优势与实现技巧7
算法
学究天人26 分钟前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷6)
网络·算法·数学建模·动态规划·几何学·图论·拓扑学
wabs66632 分钟前
关于动态规划【力扣72.编辑距离的思考】
算法·leetcode·动态规划
用户333239768841 小时前
我做了一个 RepoMind:让 AI 写架构前,先去看看真实开源项目
算法
chh5631 小时前
C++--list
开发语言·数据结构·c++·学习·算法·list
killerbasd1 小时前
总结 7。10
人工智能·算法·机器学习
林间码客1 小时前
RAG系统评估指南:从入门到实践
人工智能·算法·机器学习
凌波粒1 小时前
LeetCode--47.全排列 II(回溯算法)
算法·leetcode·职场和发展
学究天人1 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷8)
线性代数·算法·机器学习·数学建模·动态规划·图论·抽象代数