1.题目:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
示例 :
输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 6, q = 4
输出: 5
2.代码:
法1:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/*
后序非递归遍历中,访问到该结点时,栈中存放的是该结点到根结点的路径,即该结点从下到上的所有祖先结点。
假设先访问到p,将栈中结点暂存stack2,stack2存放的是p的所有祖先。之后访问到q,此时stack中存放的是q所有
祖先,从栈顶开始比较,找出最近公共祖先。
ps:两个栈长不一样,将stack中元素依次与stack中比较。
*/
typedef struct TreeNode* Tree;
typedef struct{
Tree* array;
int top;
}Stack;
struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q){
Stack* s=(Stack *)malloc(sizeof(Stack));
s->array