leetcode面试题04.08(第一个共同祖先)--C语言实现

求:node

设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其余的节点存储在另外的数据结构中。注意:这不必定是二叉搜索树。算法

例如,给定以下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]数据结构

    3
   / \
  5   1
 / \ / \
6  2 0  8
  / \
 7   4
示例 1:spa

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出: 3
解释: 节点 5 和节点 1 的最近公共祖先是节点 3。
示例 2:设计

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出: 5
解释: 节点 5 和节点 4 的最近公共祖先是节点 5。由于根据定义最近公共祖先节点能够为节点自己。
说明:it

全部节点的值都是惟一的。
p、q 为不一样节点且均存在于给定的二叉树中。io

 

解:二叉树

思路:搜索

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 
struct  TreeNode* lowestCommonAncestor( struct  TreeNode* root,  struct  TreeNode* p,  struct  TreeNode* q){
     if (root==NULL)   return  NULL;
     if (root==p || root==q)   return  root;
     struct  TreeNode *left,*right;
     if (root->left!=NULL) left = lowestCommonAncestor(root->left,p,q);
     if (root->right!=NULL) right = lowestCommonAncestor(root->left,p,q);
     if (left==NULL)   return  right;
     if (right==NULL)  return  left;
     return  root;
}
相关文章
相关标签/搜索