
如果只给一个前序遍历,是不能构造出二叉树的,但是把空节点也加上,就可以唯一构造一个二叉树,按要求模拟一遍:

代码的执行过程被唯一限制住,还有一类是最优化问题,用算法解决该类问题。
class Solution {
public:int k = 0;string s;bool isValidSerialization(string preorder) {s = preorder + ','; // 保持格式一致, 在末尾加上逗号if (!dfs()) return false; // 如果中间出错 返回falsereturn k == s.size(); // 最后判断时, 不能有多余的元素}bool dfs () {if (k == s.size()) return false; // 此时应该要有元素,没有则创建失败if (s[k] == '#') return k += 2, true; // 逗号表达式 返回最后一个表达式的值, 写相当于写{k += 2; return true;}while (s[k] != ',') k++; // 遍历这个节点k++; //遍历结束 删除逗号return dfs() && dfs (); // 遍历左子树 以及 右子树}
};


![验证二叉树的前序序列化[抽象前序遍历]](https://img-blog.csdnimg.cn/60781e71a8f34d8f86aefa8e2b77671d.png)












![IIC通信协议详解[转载]](https://img-blog.csdnimg.cn/20190210172036333.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NDEwNzMw,size_16,color_FFFFFF,t_70)

