654:
比昨天的两个构造二叉树要简单一些,不构造新数组只维持左右两个指针的方法也不难。但是需要记住的是开始递归前什么时候需要加if什么时候不需要,直接贴上题解里的解答:
一般情况来说:如果让空节点(空指针)进入递归,就不加if,如果不让空节点进入递归,就加if限制一下, 终止条件也会相应的调整。
617:
递归做起来更简单一点,递归的时候不要忘记是用来给左右指针赋值的,不赋的话就递归相当于啥也没干。两天没写层序遍历有点忘了,需要注意除了一开始判断两个树是否有一个为空,其他的条件判断都应该在whileloop里面赋值的时候做。还有不要忘记加入当前节点的左右子节点入队列!
700:
很简单,递归的做法要注意返回递归的值,要不然白递归。
98:
用中序遍历把元素放进数组然后遍历比较的方法比较简单。
同样的思路但不放进数组,用递归遍历的同时检查,却一做就出错。
一开始总想着用维护最大和最小值来做,但对于每次递归两个值应该怎么传是弄了半天也没弄清楚,正确做法是:初始化两个值为各自的极限,比较左子节点时,把当前节点的值当成max传入,如果左子节点大于等于max,则返回false;比较右子节点时,把当前节点的值当成min传入,如果右子节点小于等于min,则返回false。
易于理解一点的递归就是题解中的,按照左中右的顺序进行处理,这样只用维护一个最小值,中序遍历所有节点时,如果有任意节点小于等于最小值则返回false,大于的话就把当前节点的值赋给最小值。
最后还是要牢记:递归的结果要么赋给变量记录,要么return,要不然光递归了但相当于啥也没干。