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

	}
};

感谢观看!!!!!

相关推荐
我是哈哈hh11 分钟前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
Tisfy19 分钟前
LeetCode 2187.完成旅途的最少时间:二分查找
算法·leetcode·二分查找·题解·二分
Mephisto.java1 小时前
【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180
sql·算法·leetcode
robin_suli1 小时前
滑动窗口->dd爱框框
算法
丶Darling.1 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
labuladuo5201 小时前
Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)
数据结构·c++·算法
jiyisuifeng19911 小时前
代码随想录训练营第54天|单调栈+双指针
数据结构·算法
꧁༺❀氯ྀൢ躅ྀൢ❀༻꧂1 小时前
实验4 循环结构
c语言·算法·基础题
新晓·故知2 小时前
<基于递归实现线索二叉树的构造及遍历算法探讨>
数据结构·经验分享·笔记·算法·链表
总裁余(余登武)2 小时前
算法竞赛(Python)-万变中的不变“随机算法”
开发语言·python·算法