输出前序中序这些遍历怎么会出现这样情况


#include<stdio.h>
#include<malloc.h>
#define max 100
struct tree {
    char node;
    int num;
    tree* left;
    tree* right;
};
tree* createhuffman(int a[], char c[], int n)
{
    tree**b;
    tree* q=NULL;
    b = new tree * [n];
    int i, j;
    for (i = 0; i< n; i++) {
        b[i] = new tree;
        b[i]->num = a[i]; b[i]->node = c[i]; b[i]->left = b[i]->right = NULL;
    }
    for (i = 1; i <n; i++)
    {
        int k1 = -1,k2=0;
        for (j = 0; j< n; j++) {
            if (b[j] != NULL && k1 == -1) {
                k1 = j; continue;
            }
            if (b[j] != NULL) {
                k2 = j; break;
            }
        }
        for (j = k2; j < n; j++) {
            if (b[j] != NULL) {
                if (b[j] -> num< b[k1] -> num) {
                    k2 = k1; k1 = j;
                }
                else if (b[j] -> num < b[k2] -> num) {
                    k2 = j;
                }
            }
        }
    
        q = new tree;
        q -> num = b[k1] ->num + b[k2] ->num;
        q ->left = b[k1]; q ->right = b[k2];
        b[k1] = q; b[k2] = NULL;
    }
   
    delete[]b;
    return q;
}
static int a[10];
void haffmancoding(tree* t, int len)
{
    
    if (t != NULL) {
        if (t ->left == NULL &&t ->right == NULL)
        {
            printf("结点%c 权值:%d 编码:",t->node,t->num);
            for (int i = 0; i < len; i++)
            {
                printf("%d",a[i]);
            }
            printf("\n");
        }
    
    else {
        a[len] = 0; haffmancoding(t ->left,len + 1);
        a[len] = 1; haffmancoding(t ->right,len + 1);
    }
}}
void preorder(tree* t)
{
    if (t != NULL) {
        printf("%c", t->node);
        preorder(t->left);
        preorder(t->right);
    }
}
void inorder(tree* t) {

    if (t != NULL) {
        inorder(t->left);
        printf("%c", t->node);
        inorder(t->right);
    }
}
void postorder(tree*t) {
    if (t != NULL) {
        postorder(t->left);
        postorder(t->right); 
        printf("%c", t->node);
    }
}
void levelorder(tree* t)
{
    tree* q[max];
    int front = 0, rear = 0;
    tree* p;
    if (t!=NULL) {
        rear = (rear + 1) % max;
        q[rear] = t;
    }
    while (front!=rear)
    {
        front = (front + 1) % max;
        p = q[front];
        printf("%c", p->node);
        if (p->left != NULL) {
            rear = (rear + 1) % max;
            q[rear] = p->left;
        }
        if (p->right != NULL) {
            rear = (rear + 1) % max;
            q[rear] = p->right;
        }
    }

}
int main() {
    int a[] = { 2,5,8,9,12,16 };
    char c[] = {'A','B','C','D','E','F'};
    tree* t = NULL;
    int  n;
    n = sizeof(a)/sizeof(a[0]);
    t = createhuffman(a, c, n);
    haffmancoding(t, 0);
    printf("前序遍历:");
    preorder(t);
    printf("\n");
    printf("中序遍历:");
    inorder(t);
    printf("\n");
    printf("后序遍历:");
    postorder(t);
    printf("\n");
    printf("层次遍历:");
    levelorder(t);
    printf("\n");
}

img

输出前序中序这些遍历怎么会出现这样情况?

不delete 掉b 试试?