这道题难度就加大了,因为不是搜索二叉树,这就意味着不能通过左右这种方法来解决问题。可以通过记录父节点的方式来进行匹配?所以通过深度优先搜索算法,首先明白树的特点,其实和前面那题一样,也是如果左边有右边没有就是左边第一个,左边有右边也有就是根节点。然后只要利用深度优先搜索的特点,在第一个匹配的地方即设置返回条件(不遍历完全)。就可以和是不是搜索二叉树没有关系了!(因为即使大小不知道位置总是固定的,可以通过提前终止来判断)。
千万要记住,递归的方法对于全局变量是很不友好的!!所以在这种情况下需要每次调用的时候声明一次才不会被覆盖,不然假设左边循环用完了到了右边那么那个得到的结果就会被覆盖掉。
2023/8/24
再一次看到这道题还是有点懵逼,但其实也很简单,只需要遍历,然后在开头排除两种终点情况(达到了空,说明到了结尾,要么找到了p或者q,然后就是这个当前节点是第一个遍历到的)。因此到了if判断语句的时候,所有遍历都已经结束了,这时候的left和right代表了左和右遇到的第一个值(如果有),那么很简单,只需要判断是否两边都有值,有的话说明就是root,左边没有就是右边的(另一个值在下面,但不用再往下进行判断了),左边同理,千万记住!
还有注意前面写的全局变量和局部变量的区别。