• 11.对于每一个元素值为x的阶段,删去以他为根的子树并释放相应的空间


    #include <stdio.h>
    //删除以x元素为根的所有子树
    
    void Del_x(Bitree bt) //后序遍历删除以bt为根的子树
    {
        if(bt)
        {
            Del_x(bt->lchild);
            Del_x(bt->rchlid);
            free(bt);
        }
    }
    
    //在二叉树上查找所有以x为元素值的结点,并删除以其为根的子树
    void Search_x(Bitree bt,Elempty x)
    {
        Bitree Q[]; //Q是存放二叉树结点指针的队列。容量足够大
        if(bt) //在树非空的情况下进行
        {
            if(bt->data==x) //若根结点的值为x,则删除整棵树
            {
                Del_x(bt);
                exit(0);
            }
            InitQueue(Q);
            EnQueue(Q,bt);
            while(!IsEmpty(Q))
            {
                DeQueue(Q,p); //删除队头元素,并用p返回
                if(p->lchild) //如果右子树不空
                {
                   if(p->lchild->data==x) //左子树符合删除左子树
                    {
                        Del_x(p->lchild);
                        p->lchild==NULL;
                    }
                   else
                    EnQueue(Q,p->lchild);  //父节点的左子女置空
                }
               if(p->rchild) //如果右子树不空
               {
                   if(p->rchild->data==x)
                    {
                        Del_x(p->rchild);
                        p->rchild=NULL;
                    }
                    else
                        EnQueue(Q,p->rchlid);
               }
    
            }
        }
    }
    View Code
  • 相关阅读:
    LeetCode 234. 回文链表
    LeetCode 237. 删除链表中的节点
    LeetCode 20. 有效的括号( 括号配对 )
    堆栈操作合法性
    堆排序
    最大堆
    快速排序
    Bzoj1497 [NOI2006]最大获利
    Bzoj1001 [BeiJing2006]狼抓兔子
    Bzoj2716 [Violet 3]天使玩偶
  • 原文地址:https://www.cnblogs.com/spore/p/11623585.html
Copyright © 2020-2023  润新知