题目:若二叉树为二叉链表存储结构,写出二叉树的层次遍历的非递归算法。
解题思路:算法中采用一个顺序存储结构队列QUEUE0..M-1,front与rear分别为队头指针和队尾指针。遍历之前先把二叉树根结点的存储地址进队,然后依次从队列中退出一个元素;每退出一个元素,先访问该元素所指的结点,然后依次把该结点的左孩子结点(若存在的话)与右孩子结点(若存在的话)的地址依次进队。如此重复下去,直到队列为空。此时,访问结点的次序就是按层次遍历该二叉树的次序。
具体算法如下:
这里使用到建立二叉树方法createBT(strBT)
function layerOrder(BT) {
let queue=new Array(MaxSize), p, front, rear
if ( BT!=null ) {
queue[0] = BT
front = -1
rear = 0
while ( front<rear ) {
p = queue[++front]
console.log(p.data)
if ( p.lchild!=null ) {
queue[++rear] = p.lchild
}
if ( p.rchild!=null ) {
queue[++rear] = p.rchild
}
}
}
}
var strBT="A(B(D,E(G)),C(F(,H)))@"
var BT = createBT(strBT)
layerOrder(BT)
网友评论