标签:c++ leetcode 236 lowest common ancest
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”
_______3______ / ___5__ ___1__ / \ / 6 _2 0 8 / 7 4
For example, the lowest common ancestor (LCA) of nodes 5
and 1
is 3
.
Another example is LCA of nodes 5
and 4
is 5
,
since a node can be a descendant of itself according to the LCA definition.
求两个叶节点的第一个公共父节点。
首先深度优先遍历整棵二叉树,记录有两个目标叶节点的两条路径。
求这两个叶节点的公共父节点,相当于求两条路径的第一个公共节点。
AC代码:
class Solution { public: void getList(TreeNode *root,TreeNode *p,TreeNode * q,deque<TreeNode*> &dq1,deque<TreeNode*> &dq2,deque<TreeNode*> &temp) { if(root==NULL) return ; else { temp.push_back(root); if(root==p) dq1=temp; if(root==q) dq2=temp; getList(root->left,p,q,dq1,dq2,temp); getList(root->right,p,q,dq1,dq2,temp); temp.pop_back(); } } TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { deque<TreeNode*> dq1; deque<TreeNode*> dq2; deque<TreeNode*> temp; getList(root,p,q,dq1,dq2,temp); int sum1=dq1.size(); int sum2=dq2.size(); int x=sum1-sum2; deque<TreeNode*>::reverse_iterator ite1=dq1.rbegin(); deque<TreeNode*>::reverse_iterator ite2=dq2.rbegin(); if(x>0) for(int i=0; i<x; ++i) ++ite1; else for(int i=0; i<(-x); ++i) ++ite2; while(ite1!=dq2.rend()) { if(*ite1==*ite2) return *ite1; else { ++ite1; ++ite2; } } } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
[leetcode 236]Lowest Common Ancestor of a Binary Tree
标签:c++ leetcode 236 lowest common ancest
原文地址:http://blog.csdn.net/er_plough/article/details/47360235