在面試阿里雲時,考官問了這個乙個問題:
有乙個完全二叉樹,每個節點是乙個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進行操作,直到陣列中的元素被完全遍歷為止。
用堆疊模擬佇列,和用佇列模擬堆疊
最近在看 演算法導論 第十章裡面有一題是用了 兩個堆疊模擬乙個佇列,我設計的演算法如下 堆疊a和b,a用作入隊,b出隊 1 判隊滿 如果a滿且b不為空,則隊滿 2 判隊空 如果a和b都為空,則隊空 3 入隊 首先判隊滿。若隊不滿 1 棧a若不滿,則直接壓入棧a 2 若a滿,則將a中的所有元素彈出到棧...
用棧模擬佇列和佇列模擬棧
棧 先進後出 filo 佇列 先進先出 fifo class myqueue 兩棧模擬佇列 def init self self.input self.output 進佇列 defpush self,x 出佇列 defpop self self.peek return self.output.pop...
用陣列模擬佇列的實現
public class arrayqueuedemo 判斷佇列是否滿 public boolean isfull 判斷佇列是否為空 public boolean isempty 新增資料到佇列 public void addqueue int n rear 讓rear後移 arr rear n 獲...