进制转换
十进制转换为任意进制
#include <stdio.h>
int main(){
char res [32] = {0};
int num;
int index;
scanf("%d %d",&num,&index);
char table[] = "0123456789ABCDEF";
int i = 0;
if(num==0) res[0] = '0';
else if(num!=0){
while(num>0){
res[i++] = table[num%index];
num = num/index;
}
}
for(;i>=0;i--)
printf("%c",res[i]);
}
任意进制转化为十进制
#include <stdio.h>
#include <string.h>
int main(){
int res = 0,index,i,k=1;
char num[100],table[]="0123456789ABCDEF";
scanf("%d %s",&index,num);
for(i=strlen(num)-1;i>=0;i--){
//这里为啥算相对位置?因为不这样的话没办法算出ABCD...(16进制)
//如:'A' - '0'所算出来的值就不是正确的
res += (strchr(table,num[i]) - table)*k;
printf("%d\n",res);
k = k*index;
}
printf("%d",res);
return 0;
}
删除根节点为x的整个子树
思路:删除子树需要的是先删除左右节点然后再删除根节点,所以采用后序遍历。然后找x的话最好还是用层次遍历。
错误例子:因为这样的话,p就变成野指针了!
【C语言】5. 指针free后为什么要刻意指向NULL、野指针(原因、解决)、悬垂指针_free后的指针会指向null吗-CSDN博客
void delate(TreeNode* p){
if(p){
delate(p->lChild);
delate(p->rChild);
free(p);
}
}
void List(TreeNode* T,int x){
if(T==NULL) return;
q[++w] = T;
int sum =0,count = 0;
while(!IsEmpty()){
TreeNode *p = q[b++];
if(p->data==x) delate(p);
if(p->lChild!=NULL){
q[++w]=p->lChild;
}
if(p->rChild!=NULL){
q[++w]=p->rChild;
}
}
printf("\n");
}
正确:
void delate(TreeNode* p){
if(p){
delate(p->lChild);
delate(p->rChild);
free(p);
}
}
void List(TreeNode* T,char x){
if(T==NULL) return;
q[++w] = T;
int sum =0,count = 0;
if(T->data==x){
delate(T);
T=NULL;
return;
}
while(!IsEmpty()){
TreeNode *p = q[b++];
if(p->lChild!=NULL){
if(p->lChild->data==x){
delate(p->lChild);
p->lChild=NULL;
}else{
q[++w]=p->lChild;
}
}
if(p->rChild!=NULL){
if(p->rChild->data==x){
delate(p->rChild);
p->rChild=NULL;
}else{
q[++w]=p->rChild;
}
}
}
}