二叉树基本运算算法实现

二叉树的基本运算算法实现:

1.创建二叉树:根据二叉树的括号表示法的字符串生成二叉链存储结构

2.销毁二叉树:释放所有结点分配的空间

3.查找结点

4.查找孩子结点

5.求二叉树高度

6.输出二叉树:用括号表示法

创建二叉树

typedef struct node
{
    int data;
    struct node * lchild;
    struct node * rchild;
    struct node * parent;
}BTNode;

void CreateBTree(BTNode * &b, char * str)
{
    BTNode * St[MaxSize], *p;			//以st数组作为顺序栈
    int top = -1, k,j=0;
    char ch;
    b = null;
    ch = str[j];
    while(ch!='\0')
    {
        switch(ch)
        {
            case '(': top++; St[top]=p; k=1; break;
            case ')': top--; break;
            case ',': k=2; break;
            default: p = new BTNode;
                p->data = ch;
                p->lchild=p->rchild=null;
                if(b=null)
                {
                    b=p;
                }
                else
                {
                    switch(k)
                    {
                        case 1: St[top]->lchild = p;
                        case 2: St[top]->rchild = p;
                    }
                    
                }
                
        }
        j++;								//继续扫描
        ch=str[j];
    }
}

销毁二叉树:

void DestroyBTree(BTNode * & p)
{
    if(p!=null)							//利用递归的思想
    {
        DestoryBTree(p->lchild);
        DestroyBTree(p->rchild);
        free(p)
    }
}

查找结点:

BTNode * FindNode(BTNode * b, char x)
{
    BTNode *p;
    if(b=null)
        return null;
    else if(b->data == x)
    {
        return b
    }
    else 
    {
        p = FindNode(b->lchild,x);
        if(p != null) 
            return p;
        else
      		return FindNode(b->rchild, x);           //这一句没太懂
    }
}

查找孩子结点

BTNode * LchildNode(BTNode * p)
{
    return p->lchild;
}

BTNode * RchildNode(BTNode * p)
{
    return p->rchild;
}

求高度

扫描二维码关注公众号,回复: 4651965 查看本文章
int BTHeight(BTNode * b)
{
    int lchild, rchild;
    if(b==null) return 0;
    else
    {
        lchild = BTHeight(b->lchild);
        rchild = BTHeight(b->rchild);
        return ( lchild > rchild ) ? ( lchild + 1) : ( rchild + 1 );
    }
}

输出二叉树

void DispBTree(BTNode * b)
{
    if(b != null)
    {
        cout << b->data;
        if(b->lchild != null || b->rchild != null)
        {
            cout<<"(";
            DispBTree(b->lchild);
            if(b->rchild != null) cout<<",";
            DispBTree(b->rchild);
            cout<<")";
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40635938/article/details/85256590