二叉树广义表的算法生成 (A(B(,D(E,F)),C))

 

#include <stdio.h>
#include <stdlib.h>

typedef char DataType;

typedef struct node
{
    DataType data;
    struct node* lchild, * rchild;
} BinTNode;

typedef BinTNode* BinTree;

void printfNode(BinTNode* b)
{
    printf("%c\n", b->data);
}


BinTNode* CreateTree(char* str)
{
    BinTNode* st[100];   //用指针数组模拟栈
    BinTNode* p = NULL;
    int top, k, j = 0;        //k 标记  1:表示下一个读取的内容是左节点   2 表示右节点 top标记双亲节点
    top = -1;            //置空栈
    char ch = str[j];  //存放广义表的字符串数组
    BinTNode* b = NULL; // b 为null 代表根节点, b isnot null
    while (ch != '\0')
    {
        switch (ch) {
        case '(':
        {
            // 左括号表示新的子树的开始,所以刚建立的节点指针入栈
            top++;
            st[top] = p;
            
            if (p != NULL) {
                printf("第(%d)位:", top);
                printf("%c\n", p->data);
            }
            k = 1;
            break;
        }
        case ')':
        {
            // 右括号表示一个子树的结束,栈顶元素没有子树,出栈
            top--;
            break;
        }
        case ',':
        {
            k = 2;
            break;
        }
        default:
        {
            p = (BinTNode*)malloc(sizeof(BinTNode)); //申请内存
            p->data = ch; //先把数据域填上
            p->lchild = p->rchild = NULL;
            if (b == NULL)
            {
                b = p;
            }
            else
            {
                switch (k)
                {
                case 1:
                {
                    st[top]->lchild = p;
                    //printf("%s", p->data);
                    printf("第(%d)位的左分支:%c\n", top, p->data);
                    break;
                }
                case 2:
                {
                    st[top]->rchild = p;
                    printf("第(%d)位的右分支:%c\n", top, p->data);
                    break;
                }
                }
            }

        }
        }
        j++;
        ch = str[j];
       
    }
    return b;
}

void main(){
    BinTNode* n = CreateTree("(A(B(,D(E,F)),C))");

    printf("Hello World!\n");
    return 0;
}

  

 

posted @ 2022-10-11 19:30  巨兽~墨菲特  阅读(35)  评论(0编辑  收藏  举报