LeetCode 236 -- 二叉樹的最近公共祖先 ( Lowest Common Ancestor of a Binary Tree ) ( C語言版 )
阿新 • • 發佈:2018-12-10
題目描述 :
解題思路 : 使用遞迴查詢 , 如果有一個節點與根節點匹配 , 那麼直接返回根節點 , 否則依次在左子樹和右子樹中查詢 ,並且用left
和right分別記錄左子樹的返回值和右子樹的返回值 , 如果節點都存在左子樹中 , 那麼right就一定為NULL , 只需要返回 left , 如果
節點都存在右子樹中那麼直接返回 right , 如果left和right都為空 返回NULL ;
程式碼如下 :
/** * 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) { //如果找到p或q中任意一個直接返回 if(root==NULL||root->val==p->val||root->val==q->val) return root; struct TreeNode* left=lowestCommonAncestor(root->left,p,q); struct TreeNode* right=lowestCommonAncestor(root->right,p,q); //左右節點都不為空返回根節點 if(left&&right) return root; //左節點為空,返回右節點 else if(left==NULL) return right; //右節點為空,返回左節點 else if(right==NULL) return left; else return NULL; }