LeetCode[236] Lowest Common Ancestor of a Binary Tree

来源:互联网 发布:淘宝二手单反相机 编辑:程序博客网 时间:2024/05/22 05:28

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.

用两个栈分别保存从root节点到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) {} * }; */class Solution {public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {stack<TreeNode*> stack1, stack2;bool result1 = FindPath(root, p, stack1);bool result2 = FindPath(root, q, stack2);TreeNode* ancestor = NULL;if (result1 && result2){while (!stack1.empty() && !stack2.empty()){if (stack1.top() == stack2.top()){ancestor = stack1.top();stack1.pop(), stack2.pop();}else    break;}}return ancestor;}bool FindPath(TreeNode* root, TreeNode* node, stack<TreeNode*>& path){if (root == NULL)return false;if (root == node){path.push(root);return true;}bool result = false;if (!result)result = FindPath(root->left, node, path);if (!result)result = FindPath(root->right, node, path);if (result)path.push(root);return result;}};

0 0
原创粉丝点击