您的位置:首页 > 职场人生

[面试] 二叉树两结点的最低共同父结点

2012-11-26 12:01 295 查看
题目:二叉树的结点定义如下:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: