7.Binary Tree Serialization

这道题不难,但是要按部就班地完成还是蛮多小地方要注意的,要注意网上的算法有些其实并不是production code


  1. 网上有些解法是用Queue来临时保存树的BFS遍历。但是由于本题不需要出Queue,其实用ArrayList更加方便,因为Queue是LinkedList,要访问第i个元素还是用list更方便。
  2. 要问清树节点值的数字的范围,除非都是10以内否则应该用逗号来隔开。生成字符串以后记得去掉最后一个多余的逗号和所以尾部多余的#。还原时候先按逗号split。
  3. serialization的时候在去尾部所有多余#的操作时,用substring记得赋值还给原字符串,即 str = str.substring(0, str.length()-2); 如果不赋值给str是会无限循环的,因为substring操作并不会更改原字符串。之所以去掉后两个字符是因为之前的编码部分在#后面还有逗号。
  4. deserialization时候按谁循环还迟疑了下,应该循环的的是之前生成的字符串,辅助的ArrayList记录访问的第i个就好,因为它是每左右子处理完以后再加1。然后记得每次反转 isLeft 的值保证左右互搏。
  5. 比较String记得用Equals而别用==,production code会不过。
  6. 不要轻视null情况,只是不计入辅助ArrayList,写入字符串和生成树的时候还是要加入的,别一顺手把相关logic只写在!=nunll的代码块里了。
Show your support

Clapping shows how much you appreciated DeReK’s story.