终于可以悄悄开启新的学习旅程,争取早日把各个DS的easy先解决
104. Maximum Depth of Binary Tree
二叉树的最大深度。虽然很简单,可是没想出来···也许是太久没看二叉树了,没及时复习,全就饭吃了。。
//4.8复习,recursive很容易就写出来了,但是效率很显然很低,只打败了18%的人
所以尝试用栈什么的,但是没有一点思路,参考solution里面的代码
并做了一些更改【查看details才发现,并没有提高效率反而低了。。。是5%·······我想静静】
public int maxDepth(TreeNode root) { if (root == null) return 0;//-----------忘记加这句,愣是坑在里面了,多次编译就是下面空指针异常,一定一定要!!!做输入检查!!!!
Deque<TreeNode> deque=new LinkedList<>(); deque.addFirst(root); int counter=0; while(!deque.isEmpty()) { int size=deque.size();//获取刚刚压入栈的那一层的结点数目,是一层一层压入的 while(size-->0) {//从上面取出 //从下方压入 TreeNode pNode=deque.pollFirst(); if(pNode.left!=null) deque.addLast(pNode.left); if(pNode.right!=null) deque.addLast(pNode.right); } counter++; } return counter; }
Deque是双端队列,其实就是队列,还可以当stack用,比起那两个似乎这个更加提倡一些,其实直接 Queue =new LinkedList()就行,原题用的stack说实话觉得是错的,不过也ac了,因为后来竟然使用了addlast其实就是队列。
poll()是弹出,返回值,为空返回null
remove()是弹出,但是如果为空返回异常。
peek()则仅仅是获取
//复习4.13!竟然栽了!Deque作为 queue使用!是addLast()!!!pollFirst()!!!!!
作为stack使用 addFirst(),removeFirst()
226. Invert Binary Tree
哈哈这个自己写了出来,但是出错了改了一处名称就AC啦,重点是没搞清楚递归函数的输入和输出的关系,本函数中,这俩应该是同一货
***还有 又忘记做输入检查!!!!!
final TreeNode left = root.left, right = root.right; root.left = invertTree(right); root.right = invertTree(left);
还是solution里面的更简洁些啊,反正都是要反转的,等你反转完了再分别做我的left和right吧
///感觉这种二叉树问题涉及到栈的都是 先解决,再分别压入左孩子右孩子的感觉。
//4.9复习 迭代+栈,迭代+队列
//DFS---对应栈
//BFS ----对应队列
543. Diameter of Binary Tree
对每个节点,求最大和次大深度·····然后求最大的
543. Diameter of Binary Tree
很生气没心情
111. Minimum Depth of Binary Tree//0413继续!