Tree100SameTree

Predefined Methods

  • linkedList use as Queue to realize BFS 遍历
  • peek() + remove() = poll()
  • peekFirst() 和pollFirst()在ll为空时会返回null,以后可以用

思路

  1. 用FIFO遍历整个tree从而挨个对比 => 其实while循环就行,没必要储存全部tree只要储存当前depth和下一个depth就好
  2. 刚开始不小的用什么条件终止,后来发现不能用peek() != null因为那代表一个空节点,应该用size() > 0
  3. 处理null的时候应该直接对比两者
  4. 第一次做tree的题竟然一遍通过了54个test case并且我并没有自己检验因为懒得build tree。。。。开心~

Tricks

  • Null节点在上一层已经被赋值,因此只需要remove掉即可。与array和ll的先判断是否为null再处理有所不同: 因为treeNode可以有null,所以是先赋值再判断特殊情况,而普通list是先判断特殊情况再处理。
  • Queue cannot be initialized! should use Queue<TreeNode> = LinkedList<TreeNode>()

9/5/2016 看了discussion

https://discuss.leetcode.com/topic/57170/summary-of-java-solutions

三种思路,我想的是第三种
  1. Recursive
  2. DFS DFS的拔高(我的帖子)https://discuss.leetcode.com/topic/57599/java-dfs-by-one-stack-1ms
  3. BFS
其中BFS对于while中的if判断,写的比较整齐,主要原因是只enqueue非null的节点,省去了对于null节点的处理
  • queue.isEmpty()也可以作为结束标志
  • 先用poll()也是对的,因为无论什么情况都需要remove()
  • 比较两个Queue的头节点是否同时为null,可以用pQueue.size() != qQueue.size()判断
  • LOGIC FLOW 所有的if都需要两个queue同时比较其实没必要,子节点不为null就enqueue,之后直接用size()比较,既快又好
  • 遍历tree方法一:先poll()再enqueue()再size()这个思路很适合对于它的练习放在Tree101SymmetricTree里面

Logic Flaw

  • while用了&&但忘记了一个null一个非null的情况: 见isSymmetricByBFS()中return前的if语句
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值