指標之思考

2022-08-22 15:36:09 字數 1639 閱讀 6605

給定乙個二叉樹

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 指向的記憶體空間的...