每天,自我肯定?还是自我否定?”
『每日一题』
题目取自清华大学《数据结构》题集,严蔚敏,米宁, 吴伟民
已知在二叉链表中,root为根节点, p^和q^为二叉树中两个节点,试编写求距离他们最近的共同祖先的算法。
============
题解:
如果此题的树结构是双向的,即子节点保留父节点的指针,父节点有指向子节点, 那么可以很快求解。现在考虑单向的情形。
用递归不可取,会大大增加算法复杂度。
将二叉链表实现为单向二叉树:
struct Tree
{
int value;
struct Tree * left;
struct Tree * right;
}
由于树的生长是单向向下的,子节点无法知道父亲节点,所以要分别通过遍历p^, q^得到其具体路径。
写了一个函数,能够实现二叉树的遍历,同时能够将到达目标节点所进过的路径压入栈,并将栈作为返回值