給定乙個二叉樹
struct treelinknode填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為
null
。
初始狀態下,所有 next 指標都被設定為null
。
說明:示例:
給定完美二叉樹,
1呼叫你的函式後,該完美二叉樹變為:/ \
2 3
/ \ / \
4 5 6 7
1 -> null/ \
2 -> 3 -> null
/ \ / \
4->5->6->7 -> null
原始二叉樹根節點為treelinknode* root。此時在記憶體中,有兩個實體,乙個是二叉樹實體,乙個是指標實體。實際只需要指標實體的指標按相應要求填充。我新建乙個deque容器,層次遍歷二叉樹,存放乙個個treelinknode*的指標,
此時產生第三個實體,指標實體2,如果我再新建乙個臨時變數treelinknode* tmp,指向出隊指標,此時產生第四個實體,臨時變數指標3,我對臨時變數的指標操作,並不能作用於root系列的指標。
----------------------------
更新,為了能對root系列指標產生操作,我們取root位址,將其入隊,最終成功通過。
1/**2* definition for binary tree with next pointer.
3* struct treelinknode
7* };8*/
9class
solution
3233}34
}35 };
---------------------------更新,看到乙個別的答案,跟我幾乎完全一樣,但是用的是一級指標,我將我的**中二級指標全部換為一級指標,結果也通過了
/*** definition for binary tree with next pointer.
* struct treelinknode
* };
*/class solution }}
};
本來以為自己搞懂了,看來還是有問題,最後我梳理了一遍。
stl中deque的push_back操作呼叫了乙個建構函式,複製了乙個root,這時有三個實體, treenode t, treenode *root,treenode *tmp,他們的關係是*root 等價於*tmp等價於t;
本來操作tmp,跟root沒關係,但是為什麼tmp->next改變後root->next也變了呢,因為上面那個等價關係,前面的改變相當於 (*tmp).next改變, 而(*root).next與(*tmp.next)是同乙個,所以看起來沒有動root,但是他們指向的內容是同乙個,只要將指向的內容改變,就相當於改變了root。
再說回二級指標那裡,二級指標是取root的位址,treenode **tmp,此時(*tmp)等價於root,操作就是相當於root操作,就改變了root。二級指標簡單粗暴!
指標挺考驗c++功力的,多級指標簡單粗暴,一級指標優雅而晦澀難懂。
關於指標的思考
前兩天在網上看了一道關於指標的題,對於我這種,看到指標就矇圈的人來說,挺有意思,下面就這道題,咱好好看看。include voidf char p main p p a f p printf s r n p 最後列印出來的應該是啥呢 我一開始寫的是456,但其實是3 在vs上執行了下,確實是3,這是...
c語言 指標的思考
面向指標程式設計 好文!對於指標的思考。理解 指標本身是乙個變數,有值 就是他本身的記憶體位址 指標可以指向別的位址。指標動態申請記憶體,就像在乙個位址上面蓋房子,就算被free掉,也只是這個房子被掀了,並不代表他本身所具有的位址變成了null。結構體指標實際上就是乙個指標,指向了結構體裡面的內容,...
多型vptr指標思考一
多型是c 的靈魂之處,c 實現多型就是使用vptr指標,實現多型的三個條件,1.virtual 關鍵字 2.子類重寫父類的虛函式 3.父類指標呼叫子類物件虛函式 直接附上 發現vptr是儲存在父類中 當a是乙個物件時 輸出的是vptr指標的位址,void a 可以簡單的看作把 a 指向的記憶體空間的...