算法练习----力扣每日一题------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;

	}
};

感谢观看!!!!!

相关推荐
漫随流水29 分钟前
leetcode算法(104.二叉树的最大深度)
数据结构·算法·leetcode·二叉树
机器学习之心HML43 分钟前
鲸鱼算法(WOA)优化Kriging模型
算法
DYS_房东的猫1 小时前
《 C++ 零基础入门教程》第6章:模板与 STL 算法 —— 写一次,用万次
开发语言·c++·算法
Tim_101 小时前
【算法专题训练】37、前缀树&二叉树
算法
NineData1 小时前
第三届数据库编程大赛-八强决赛成绩揭晓
数据库·算法·代码规范
雍凉明月夜1 小时前
深度学习之目标检测yolo算法Ⅱ(v4)
深度学习·算法·yolo·目标检测
FAFU_kyp2 小时前
Rust 的 引用与借用
开发语言·算法·rust
永远都不秃头的程序员(互关)2 小时前
【K-Means深度探索(一)】数据炼金术第一步:从零手撕K-Means聚类算法
算法·kmeans·聚类
我想回家种地2 小时前
算法期末复习
算法
rgeshfgreh2 小时前
MPPI算法实战:运动规划新利器
算法