王道数据结构树与二叉树课后习题5.3.4第12、13题

img

img

img

img


12.在二叉树中查找值为x的结点,试编写算法(用c语言)打印值为x的结点的所有祖先,假设值为x的结点不多于一个
13.设一棵二叉树的结点结构为[LLINK,INFO,RLINK],ROOT为指向该二叉树根结点的指针,p和q分别为指向该二叉树中任意两个结点的指针,试编写算法ANCESTOR(ROOT,p,q,r),找到p和q的最近公共祖先结点r
这两道题有兄弟姐妹会的吗?书后答案真的没看懂😭

12.从根开始,在寻找 x 的过程中维护一个栈,每次走到儿子之前先把当前点压入栈中,显然找到 x 时栈里面的是它的祖先。
13.对 p,q 都做一次上面的找祖先操作,因为栈从底到顶深度依次增大,而最近公共祖先是深度最大的公共祖先,所以对这两个栈从底到顶找到第一个不相同的点,这个点前面一个就是最近公共祖先。