我正试图想出一种算法来改变数值二叉树的基。
例如,假设我有一组树的基数是8,主根是4,我需要扫描树并将其更改为基数5(我可以假设树可以更改)
我似乎不能想出这个公式,我知道我必须用递归来做,但是一旦我改变了1个根,我就失去了它的子节点的所有连接。
我该怎么办?

最佳答案

下面是执行此操作的伪代码:

    void preorder(node* p) {

      if(p==null)
          return

      p->data = change_base(p->data,oldbase,newbase);
      preorder(p->left);
      preorder(p->right);

    }


    int change_base(int k,int old,int new) {

       base10 = 0;
       while(k>0) {

          base10 = base10*old + k%10;
          k = k/10;
       }

       newbase = 0;

       while(base10>0) {

          r = base10%new;
          newbase = newbase*10 + r;
          base10 = base10/10;

      }

     return(newbase);

  }

10-06 12:44