其实就是一个求LCA的模板问题。
我的实现方法是在p、q上分别打一个标记。然后递归把标记向上传递。当找到一个拥有两个标记的节点,它就是最近公共祖先。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ TreeNode* result; bool LCA(TreeNode* now,TreeNode* p,TreeNode* q){ if (now==NULL) return false; int cnt=0; if (now==p) cnt+=1; if (now==q) cnt+=1; cnt+=LCA(now->left,p,q); cnt+=LCA(now->right,p,q); if (cnt==1) return true; else if (cnt==2){ result=now; return false; } return false; } class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { result=NULL; LCA(root,p,q); return result; } };