• 找出二叉树中两个节点的最低共同父节点


    算法设计:后续遍历此二叉树,将两个节点的父节点分别放入两个链表中,然后顺序对比,找出最后一个相同的节点,既是最低共同节点

    C伪码实现:

    List *h,*h1,*h2;
    
    bool find1=false,find2=false;
    
    void postVisit(BTNode *root)
    {
          if(root!=null)
          {
              add(root,h);                         //将root结点加入以h为表头的链表中
    
              postVisit(root->lchild);
              if(root->lchild!=NULL)
                   delete(root->lchild,h);         //从h链表中删除root右孩子结点
    
              postVisit(root->lchild);
              if(root->rchild!=NULL)
                   delete(root->rchild,h);         //从h链表中删除root左孩子结点
    
              if(root->value == v1)
              {
                    copy(h,h1);                    //找到第一个所需结点 将h链表中的所有节点copy到h1中
                    find1=true;
              }
              else((root->value == v1))
              {
                    copy(h,h2);                    //找到第二个所需结点 将h链表中的所有节点copy到h2中
                    find2=true;
              }
              if(find1 && find2)                   //两个链表形成,退出后序遍历
                    return;
           }
    }
    
    void findParentNode(BTNode *root)
    {
           postVisit(root);
    
           for(List *p1=h1,*p2=h2;p1->next->node!=p2->next->node && p1!=NULL && p2!=NULL;p1=p1->next,p2=p2->next);
           
           if(p1->node!=p2->node)                 //此时没有公共结点,可能没有找到目标结点
                 printf("not same parent");
           else
                 printf(p1->node);                //输出最低公共结点
                    
              
    }
  • 相关阅读:
    小程序生命周期
    小程序
    vue mixins
    cocos creator(四)
    parcel
    uniapp less
    webview
    05月
    qt项目重构02
    make和cmake
  • 原文地址:https://www.cnblogs.com/biyeymyhjob/p/2600713.html
Copyright © 2020-2023  润新知