leetcode236-二叉树的最近公共祖先

题目:

 

例如,(6, 4)的公共祖先是5,(4, 5)的公共祖先是5

分析:

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
    if(root == NULL || p == root || q == root)  return root; // 是否有p, q出现
    TreeNode* l = lowestCommonAncestor(root->left, p, q);
    TreeNode* r = lowestCommonAncestor(root->right, p, q);
    if(l == NULL && r == NULL)  return NULL;
    else if(l == NULL && r)  return r;
    else if(l && r == NULL)  return l;
    else return root;  // 在两边都出现了
}

另一种不太方便的方法是先遍历一遍记录每个节点的父节点。

 

参考链接:

1. https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/solution/c-jing-dian-di-gui-si-lu-fei-chang-hao-li-jie-shi-/

2. https://blog.csdn.net/qq_28114615/article/details/85715017

 

posted @ 2020-03-26 10:13  Rogn  阅读(321)  评论(0编辑  收藏  举报