第一题直接跳过吧,思路和前面的一样,就是定义一个前驱结点pre,然后求出差值与全局变量作比较看谁更小,然后返回即可。
第二题有两种方法,第一种方法需要遍历两遍二叉树将其存入map中然后看最大值,第二种方法与第一题一样,定义前驱结点,只要相等count就一直加加,不相等了count赋为1,同时有一个Max count储存最大值的大小,当count大于他时,就会将数组里的元素clear,然后存入新的众数。
第三题主要用到的是后序遍历的方法,也就是回溯的技巧,当我找到p或者q时就返回当前节点,当我的左右子树返回的值不为空时,就代表他们的孩子有p,q两个结点的其中一个,就返回这个root代表这是他们的最近公共祖先,还有就是当left为空,而right不为空时,这个时候要返回right,这就是今天的题目