数据结构——树的实现

来源:互联网 发布:mac版阿里旺旺退出账号 编辑:程序博客网 时间:2024/06/05 14:25

在做树的遍历的时候发现自己对实现树的方法不太了解,也就是不知道怎么把一棵树的结构存到内存中,所以对树的实现找了一些资料,自己也研究了一下。

首先,要想让计算机正确的保存你的“树”,你要用一种和你代码相匹配的输入方式,我用的是采用广义表表示的输入法,例如:A(B(D,E),C(F,G))。
这个式子可以分为以下几部分:
A(B,C): A是这个结构的根节点,B,C是A的两个孩子。
A(B(D,E),C(F,G)):B,C分别是D、E和F、G的父节点。

              A            /   \           B     C          / \   / \         D   E F   G

当用广义表表示的方法输入之后,就可以用下面的代码来建立二叉树:

void CreateBTree(struct BTreeNode** BT, char* string){    struct BTreeNode* p;    struct BTreeNode* s[StackMaxSize];   //定义s数组作为存储根结点的指针的栈使用    int top = -1;               //栈顶指针置为-1,表示空栈    int k;                 //k作为处理结点的标志,k=1处理左子树,k=2处理右子树    int i = 0;              //用i扫描数组string中存储的二叉树广义表字符串,初值为0    *BT = NULL;               //把树根指针置空,即从空树开始建立二叉树    while (string[i])    {        switch (string[i])        {            case ' ':break;            case '(':            {                if (top == StackMaxSize - 1)                {                    printf("栈空间太小,需增加StackMaxSize!\n");                    exit(1);                }                top++;                s[top] = p;                k = 1;                break;            }            case ')':            {                if (top == -1)                {                    printf("二叉树广义表字符串错!\n");                    exit(1);                }                top--;                break;            }            case ',':k = 2;break;            default:            {                p = malloc(sizeof(struct BTreeNode));                p->data = string[i];                p->left = p->right = NULL;                if (*BT == NULL)                    *BT = p;                else                {                    if (k == 1)                        s[top]->left = p;                    else                        s[top]->right = p;                }            }        }        i++;    }}
0 0
原创粉丝点击