[面试] 二叉树两结点的最低共同父结点
2012-11-26 12:01
295 查看
题目:二叉树的结点定义如下:
struct TreeNode
{
int m_nvalue;
TreeNode* m_pLeft;
TreeNode* m_pRight;
};
输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。
递归版本:空间O(1),时间O(n)
struct TreeNode
{
int m_nvalue;
TreeNode* m_pLeft;
TreeNode* m_pRight;
};
输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。
递归版本:空间O(1),时间O(n)
struct Node { int val; Node *left; Node *right; Node():left(NULL), right(NULL){} }; Node *findFather(Node *root, Node *node1, Node *node2, bool &node1Find, bool &node2Find) { if (root == NULL) return NULL; bool leftNode1Find = false, leftNode2Find = false; Node *leftNode = findFather(root->left, node1, node2, leftNode1Find, leftNode2Find); if (leftNode != NULL) return leftNode; bool rightNode1Find = false, rightNode2Find = false; Node *rightNode = findFather(root->right, node1, node2, rightNode1Find, rightNode2Find); if (rightNode != NULL) return rightNode; node1Find = leftNode1Find || rightNode1Find; node2Find = leftNode2Find || rightNode2Find; if (node1Find && node2Find) return root; if (root == node1) node1Find = true; if (root == node2) node2Find = true; return NULL; }
相关文章推荐
- 面试训练二叉树两结点的最低共同父结点
- 程序员面试100题之五:二叉树两个结点的最低共同父结点
- 【编程题目】二叉树两个结点的最低共同父结点
- 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点
- 数据结构练习(36)二叉树两结点的最低共同父结点
- 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点
- [二叉树]二叉树两个结点的最低共同父结点
- 二叉树两个结点的最低共同父结点
- 二叉树两个结点的最低共同父结点
- 二叉树两结点的最低共同父结点
- 程序员面试100题之五:二叉树两个结点的最低共同父结点
- 程序员面试100题之五:二叉树两个结点的最低共同父结点
- 二叉树两个结点的最低共同父结点
- 二叉树两结点的最低共同父结点
- 75.二叉树两个结点的最低共同父结点
- 二叉树两个结点的最低共同父结点
- 48. 二叉树两结点的最低共同父结点(3种变种情况)[Get lowest common ancestor of binary tree]
- 二叉树两结点的最低共同父结点[数据结构]
- 二叉树两个结点的最低共同父结点
- 二叉树两结点的最低共同父结点