题目:交换所有结点左、右子树的位置。
该操作采用按层次遍历方法比较合适。遍历过程中访问一个结点时,就将该结点的左、右子树的位置进行交换。
解题思路:算法中需要用到一个队列QUEUE[0,..,M-1],队头指针与队尾指针分别用front与rear表示。这里,不妨假设该队列采用顺序存储结构,并且空间足够大。
具体算法如下:
这里使用到建立二叉树buildBT()
function exchangeBT(T) {
let queue=new Array(MaxSize), temp, p=T, front, rear
if ( T!=null ) {
queue[0] = T
front = -1
rear = 0
while ( front<rear ) {
p = queue[++front]
temp = p.lchild
p.lchild = p.rchild
p.rchild = temp
if ( p.lchild!=null ) {
queue[++rear] = p.lchild
}
if ( p.rchild!=null ) {
queue[++rear] = p.rchild
}
}
}
}
var str = "ABC DE F G "
var ch = ''
var len = str.length, i=0
var T = buildBT()
exchangeBT(T)
网友评论