题目一:
解法1 :
step1 : 采用任何一种遍历,用hashMap记录每个节点的父亲节点,
step2: 根据目标节点node1,往上找,所有沿途的点放到hashSet中,
ste3: 根据目标节点node2,往上找,当碰到在hashset中时返回,
解法2:
代码:1
情况一:分析
情况二: 当node1 和 node2 不是互为祖先的关系的话,当递归的第一个节点是node1 或者 node2 的时候,就不再往下递归,
而是往上回溯,当回溯的时候,一个节点两边都不是null,说明是首次出现祖先
代码形式上这道题是树形dp递归套路的问题,但是理解上不好解释,左右信息到底到底是什么,关键base case不太常规,
题目二、后继节点问题,
中序遍历的紧随其后的节点
解法1 : 先中序遍历,生成序列,保存每个节点,然后找每个节点的后序
解法2 :
调研结构:找X 的 后继 Y
情况1 : 如果x有右树,那么后继节点就是右树的最左节点
情况2: 如果x 没有右树,并且x是父亲的左孩子,那么后继节点是父亲
情况3: 如果x没有右树,那么得找x的父亲的父亲,直到自己父亲是父亲父亲的左节点的时候,如果已知找到null,那么就返回null。
tips: 情况2、3 可以整理 成一个。