题目链接
思路:寻找公共祖先是题目主要任务,我选择了将两节点的祖先及自身分别都抛入两个堆栈中,两堆栈中抛出的最后一个两者都有的元素即为两节点公共祖先.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<stack>
using namespace std;
const int MAX = 10000;
int way;//决定插入哪个堆栈中
int Node[MAX],i;
struct BST {
int Data;
BST* Left,*Right;
BST() {
Left = Right = nullptr; }
}*head;
stack <BST*>s1;
stack <BST*>s2;
BST* Create_Tree(BST*head,int s,int e);
BST* Assign_Value(int s);//为节点分配值
bool Insert(BST* tmp);//向栈中插入祖先
bool find_item(BST*head,int item);
void Clear();//清空堆栈
bool isfound(int item1,int item2);
void print_ancestor(int item1, int item2);
int main<