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

原题链接

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

题目解析

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

递归解法

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

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

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

对于preorder[pos]处的递归判断来说

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

运行结束后,在递归执行的入口处如果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;

	}
};

感谢观看!!!!!

相关推荐
Voyager_431 分钟前
图像处理踩坑:浮点数误差导致的缩放尺寸异常与解决办法
数据结构·图像处理·人工智能·python·算法
文艺倾年36 分钟前
【八股消消乐】手撕分布式协议和算法(基础篇)
分布式·算法
万岳科技系统开发1 小时前
从源码优化外卖配送系统:算法调度、智能推荐与数据分析应用
算法·数据挖掘·数据分析
信奥卷王4 小时前
[GESP202503 五级] 原根判断
java·数据结构·算法
兮山与4 小时前
算法4.0
算法
nju_spy4 小时前
力扣每日一题(二)任务安排问题 + 区间变换问题 + 排列组合数学推式子
算法·leetcode·二分查找·贪心·排列组合·容斥原理·最大堆
初听于你4 小时前
高频面试题解析:算法到数据库全攻略
数据库·算法
翟天保Steven4 小时前
ITK-基于Mattes互信息的二维多模态配准算法
算法
代码对我眨眼睛4 小时前
226. 翻转二叉树 LeetCode 热题 HOT 100
算法·leetcode·职场和发展
黑色的山岗在沉睡5 小时前
LeetCode 494. 目标和
算法·leetcode·职场和发展