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;
}
相關文章
相關標籤/搜索