美文网首页
数据结构题目50:二叉树的删除

数据结构题目50:二叉树的删除

作者: 玲儿珑 | 来源:发表于2020-05-12 01:36 被阅读0次

    题目:删除二叉树的结点。
    这里所说的二叉树的删除是指 删除并释放该二叉树中数据域内容为item的那个结点和以该结点为根结点的子树。

    解题思路:问题的解决分两步:
    第1步:先找到满足条件的结点(若存在的话)。只要对该二叉树进行遍历(遍历过程中,访问某个结点的动作就是判断这个结点是否为满足条件的结点)。
    第2步:若找到满足条件的结点,先将该结点(二叉树的根结点除外)的双亲结点的相应指针域置为null,然后释放以该结点为根结点的子树的所有结点的存储空间。

    具体算法如下:
    这里使用到建立二叉树buildBT()
    使用到销毁二叉树destroyBT(T)

    function deleteBT(T, item){
        let stack=new Array(MaxSize), q, p=T, top=-1
        if ( T.data == item ) {
            destroyBT(T)
            return null
        } else {
            do {
                while ( p!=null ) {
                    if ( p.data==item ) {
                        if ( q.lchild==p ) {
                            q.lchild = null
                        } else {
                            q.rchild = null
                        }
                        destroyBT(p)
                        return T
                    }
                    stack[++top] = p
                    q = p
                    p = p.lchild
                }
                p = stack[top--]
                q = p
                p = p.rchild
            } while ( !(p==null&&top==-1) );
        }
    }
    
    
    var str = "ABC  DE  F  G   "
    var ch = ''
    var len = str.length, i=0
    var T = buildBT()
    deleteBT(T, 'G')
    

    相关文章

      网友评论

          本文标题:数据结构题目50:二叉树的删除

          本文链接:https://www.haomeiwen.com/subject/fonmnhtx.html