class Solution { public: /** * * @param root TreeNode类 * @param o1 int整型 * @param o2 int整型 * @return int整型 */ //本题解法好像不满足时间复杂度On,已经要达到1秒了 int num=0; //用于控制存入双亲表示法的结构体的变量 typedef struct tree{ int val; int parent; }tree; //树的双亲表示法的结构体 tree a[100000]; //结构体声明 void jianli(TreeNode* root,int b){ //该方法将链式存储改为顺序双亲存储 a[num].val=root->val; a[num].parent=b; b=num; num++; if(root->left!=NULL) jianli(root->left,b); if(root->right!=NULL) jianli(root->right,b); } int lowestCommonAncestor(TreeNode* root, int o1, int o2) { // write code here for(int i=0;i<100000;i++) a[i].val=-1,a[i].parent=-2; //初始化 jianli(root,-1); //建立 int j,k; for(int i=0;i<100000;i++){ //找到目的节点的位置 if(a[i].val==o1) j=i; if(a[i].val==o2) k=i; } int e[100000],g=0,h=0; while(j!=-1){ //将其中一个节点的所有双亲列出 e[g]=a[j].val; j=a[j].parent; g++; } while(k!=-1){ //另一个节点的每个双亲跟前一个结点的双亲去匹配,第一个相同的就是结果 for(int i=0;i<100000;i++){ if(a[k].val==e[i]){ h=e[i]; break; } } k=a[k].parent; if(h!=0) break; } return h; } };