leetcode 116 --- 填充每个节点指向最右节点的next指针
生活随笔
收集整理的這篇文章主要介紹了
leetcode 116 --- 填充每个节点指向最右节点的next指针
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 題目
填充每個(gè)節(jié)點(diǎn)指向最右節(jié)點(diǎn)的next指針,?
填充所有節(jié)點(diǎn)的next指針,指向最接近它的同一層右邊節(jié)點(diǎn)。如果沒(méi)有同一層沒(méi)有右邊的節(jié)點(diǎn),則應(yīng)該將next指針設(shè)置為NULL。
初始時(shí),所有的next指針都為NULL
注意:
- 你只能使用常量級(jí)的額外內(nèi)存空間
- 可以假設(shè)給出的二叉樹(shù)是一個(gè)完美的二叉樹(shù)(即,所有葉子節(jié)點(diǎn)都位于同一層,而且每個(gè)父節(jié)點(diǎn)都有兩個(gè)孩子節(jié)點(diǎn))。
2 解法
因?yàn)榇祟}為按層來(lái)填充每一個(gè)節(jié)點(diǎn)的next為其同層的右節(jié)點(diǎn)(如果存在的話)
2.1 用隊(duì)列的方法
2.2 不用隊(duì)列
因?yàn)樾枰獙⒚恳粚佑胣ext指針鏈接好, 所以遍歷的思想是,鏈接好的一層遍歷的時(shí)候把其下一層鏈接好, 在每一層遍歷時(shí),因?yàn)橐溄悠湎乱粚拥母鱾€(gè)節(jié)點(diǎn),所以要用一個(gè)last指針將上一個(gè)被鏈接為next的節(jié)點(diǎn)標(biāo)記好,且要標(biāo)記好下一層的頭節(jié)點(diǎn),以便于上一層遍歷完遍歷下一層,所以有:
/*** Definition for binary tree with next pointer.* struct TreeLinkNode {* int val;* TreeLinkNode *left, *right, *next;* TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}* };*/ class Solution { public:void connect(TreeLinkNode *root) {TreeLinkNode *start(root);while (start) {TreeLinkNode *nextStart(NULL), *last(NULL);for (auto p = start; p != NULL; p = p->next) {if (p->left) {if (!nextStart)nextStart = p->left;if (last)last->next = p->left;last = p->left;}if (p->right) {if (!nextStart)nextStart = p->right;if (last)last->next = p->right;last = p->right;}}start = nextStart;}} };總結(jié)
以上是生活随笔為你收集整理的leetcode 116 --- 填充每个节点指向最右节点的next指针的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言stanf,stanf
- 下一篇: leetcode 75 --- sort