C编程和数据结构

时间:2011-07-24 13:49:42

标签: data-structures

我们怎样才能找到二叉树的两个不同节点的最近祖先?

2 个答案:

答案 0 :(得分:0)

对于从左节点到根节点的路径上的每个节点,检查该节点是否在从右节点到根节点的路径上。

答案 1 :(得分:0)

试试这个:

   ances(struct tree *root, struct tree *p, struct tree *q)
   {
    struct tree *left, *right, *temp;

    if(root->left==p || root->right==p || root->left==q || root->right==q)
    {
     return(root);
    }
    else
    {
     left = ancestor(root->left, p, q);
     right = ancestor(root->right, p, q);

     if(left!=NULL && right!=NULL)
     {
      return(root);
     } 
     else
     {
      temp = (left != NULL) ? left : right;
      return(temp);
     }
    }

    if(root == NULL)
      return NULL;
   }