用指针模拟队列

在面试阿里云时,考官问了这个一个问题:

有一个完全二叉树,每个节点是一个TreeNode类型的节点,包括一个left指针和一个right指针,还有一个next指针,让我对树进行广度优先遍历,将next指针指向广度优先遍历的下一个节点。不让定义队列数据结构。

我的思路中是使用队列进行广度遍历,然后将其存入数组中,再对数组以父节点为n,子节点为2n和2n+1来对next指针进行赋值。

他给了我一个思路,使用指针来模拟队列。

1)使用一个head指针和一个tail指针,head为队列头,tail为队列尾。

2)开始时,head指向根,tail也指向根。

3)对head的left和right指针进行遍历,让tail的next指向left,left的next指向right,再将tail指向right节点。

4)将head的值存入数组,将head指向head的next。

5)重复3和4步,直到head和tail的都指向空为止。

这样就得到了一个被广度遍历的二叉树的数组。

而后,在将数组以父节点为n,子节点为2n和2n+1来对next指针进行赋值。

又或许我曲解了他的意思

可以直接将根放在数组的1位置,将head和tail指向a[1],读取a[1]的left和right,存入tail的下一个(即a[2])和下下一个(即a[3]),head右移,让tail指向a[1]->right,在对head进行操作,直到数组中的元素被完全遍历为止。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值