解决思路
打印公共结点,涉及自底向上查找,后序遍历;
怎么判定祖先结点呢?
从简单的起;如果该点的左孩子为x或右孩子为x,则该点为父节点,也是祖先结点之一;
往上一层;如果该点的左子树有x 或右子树有x,则该点为祖先结点之一
递归参数:
要判断是否找到x和找到祖先结点,返回值取bool
递归边界:
root为空;
找到x
找到祖先结点;
递归逻辑:
findAllAncestor(root->lc, x) || findAllAncestor(root->rc, x)
bool findAllAncestor(TreeNode* root, int x)
{
if(!root)
return false;
if(root->data == x)
return true;
if(findAllAncestor(root->lc, x) || findAllAncestor(root->rc, x))
{
cout<< root->data << " ";
return true;
}
else
{
return false;
}
}