题目:删除二叉树的结点。
这里所说的二叉树的删除是指 删除并释放该二叉树中数据域内容为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')
网友评论