题目:求二叉树中任意两个节点的最低公共父节点。
思路:
从根结点开始遍历,判断以当前结点为根的树中左右子树是不是包含我们要找的两个结点。如果两个结点都出现在它的左子树中,那最低的共同父结点必出现在它的左子树中;如果两个结点都出现在它的右子树中,那最低的共同父结点也出现在它的右子树中;如果两个结点一个出现在左子树中,一个出现在右子树中,那当前的结点就是最低的共同父结点。
struct BinaryTreeNode {
int value;
BinaryTreeNode *left;
BinaryTreeNode *right;
}
bool containsNode(BinaryTreeNode *root,BinaryTreeNode *node){
if(root == node)
return true;
bool flag = false;
if(!flag && root->left != NULL)
flag = containsNode(root->left,node);
if(!flag && root->right != NULL)
flag = containsNode(root->right,node);
return flag;
}
BinaryTreeNode *lastCommonParentNode(BinaryTreeNode <