最近的数据结构课刚教完二叉树,昨晚在做学院自己弄的一个集成环境上的数据结构题目时,看到一个比起其他二叉树简单遍历、或者计算叶子或者深度看起来难一点的题目。就是最近共同祖先节点问题(NCA-nearest common ancestor)。
想了挺久终于用递归把它解决了。但在回宿舍的路上又想到了不用递归更高效一点的算法,今天回到工作室也成功实现。但是代码还是太长了,想着能在bing或者baidu上看到更厉害的算法,但大多数还是递归实现的。接下来我就把我的非递归方法贴上来吧。
问题介绍:
【题目】试编写算法,求二叉树T中节点a和b的最近共同祖先。
二叉树类型定义:
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode, *BiTree;
可用栈类型Stack的相关定义:
typedef struct {
BiTNode *ptr; // 二叉树节点的指针类型