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

2020-05-12  本文已影响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')
上一篇下一篇

猜你喜欢

热点阅读