我正试图想出一种算法来改变数值二叉树的基。
例如,假设我有一组树的基数是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);
}