非递归寻找两个节点的最近公共祖先节点
上一篇博文给出了寻找一个结点的所有祖先节点,那么求两个节点的最近公共祖先就很容易了,首先后序遍历找到两个节点各自的祖先列表,都存在了栈中,越靠近栈顶的元素就离对应节点越近,所以只需要将两个栈元素出栈直到栈顶元素第一次相等就可以找到最近公共祖先了。
#include <iostream>
#include <stack>
using namespace std;
struct Node
{
int data;
int tag;//0表示访问左孩子,1表示访问右孩子
Node *lchild,*rchild;
};
//建树
void CreateTree(Node* &root)
{
int data;
cin>>data;
if(data==-1)
{
root=nullptr;
}
else
{
root=new Node();
root->data=data;
CreateTree(root