在面试阿里云时,考官问了这个一个问题:
有一个完全二叉树,每个节点是一个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进行操作,直到数组中的元素被完全遍历为止。

1652

被折叠的 条评论
为什么被折叠?



