二叉搜索树,思路较简单,从上至下遍历一次。
即判断根节点与输入的两个节点的值的大小:
如果根节点比两个节点值都小,说明最近祖先在根节点的右子树中
如果根节点比两个节点值都大,说明最近的祖先在根节点的左子树中
如果根节点的值在两个节点值的区间内,说明两个节点分布在不同的子树中,返回该节点即为最近的祖先。
难度较大的是,普通二叉树的最近公共祖先,由于没有值的大小关系了,故有以下几个思路:
一:深度优先搜索,构建一个哈希表,记录每个节点的父节点。
然后用一个hashset存储p的所有父节点
遍历q的父节点,如果找到一个父节点在hashset中,则return 该节点。
递归的方法没大看明白。