C++每個節點的右向指標(用二級指標操作指標)
阿新 • • 發佈:2018-11-30
核心就是用二級指標操作指標,現有一個一級指標TreeLinkNode *p1;
二級指標 TreeLinkNode **p2=&p1;
什麼意思呢,就是一級指標取地址後傳遞給二級指標讓他儲存我的地址,不要多想,就是這麼簡單。
好,現在呢單p2這兩個字母,就是一個二級指標了。那麼p1==*p2懂了吧,(p2用*取出對應地址裡面的東西),也有
(實際裡邊放置的玩意兒)==*p1==**p2
看到這裡你會說,我費力整出個二級指標幹嘛,一級指標不就能訪問記憶體了嗎。但是,朋友,你想啊,函式傳參的時候(除引用、賦值),是不是隻是一個指標複製給另一個指標它裡面的玩意兒(地址)然後他自己就跑了,你想操作他本身時他早就溜了。所以呢,為了操作它本身,我們需要提取出指標本身的地址,即二級指標。從而來改變整個樹的結構
廢話這麼多,二級指標瞭解了吧,上程式碼:
class Solution { public: void connect(TreeLinkNode *root) { if(root==NULL) return; //用二級指標來操作指標 queue<TreeLinkNode **>q; q.push(&root); while(!q.empty()) { queue<TreeLinkNode **>qt; while(!q.empty()) { TreeLinkNode **temp=q.front(); if((*temp)->left) qt.push(&((*temp)->left)); if((*temp)->right) qt.push(&((*temp)->right)); q.pop(); if(q.empty()) (*temp)->next=NULL; else (*temp)->next=*q.front(); } q=qt; } } };