leetcode 116 --- 填充每个节点指向最右节点的next指针
生活随笔
收集整理的這篇文章主要介紹了
leetcode 116 --- 填充每个节点指向最右节点的next指针
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 題目
填充每個節點指向最右節點的next指針,?
填充所有節點的next指針,指向最接近它的同一層右邊節點。如果沒有同一層沒有右邊的節點,則應該將next指針設置為NULL。
初始時,所有的next指針都為NULL
注意:
- 你只能使用常量級的額外內存空間
- 可以假設給出的二叉樹是一個完美的二叉樹(即,所有葉子節點都位于同一層,而且每個父節點都有兩個孩子節點)。
2 解法
因為此題為按層來填充每一個節點的next為其同層的右節點(如果存在的話)
2.1 用隊列的方法
2.2 不用隊列
因為需要將每一層用next指針鏈接好, 所以遍歷的思想是,鏈接好的一層遍歷的時候把其下一層鏈接好, 在每一層遍歷時,因為要鏈接其下一層的各個節點,所以要用一個last指針將上一個被鏈接為next的節點標記好,且要標記好下一層的頭節點,以便于上一層遍歷完遍歷下一層,所以有:
/*** 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;}} };總結
以上是生活随笔為你收集整理的leetcode 116 --- 填充每个节点指向最右节点的next指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言stanf,stanf
- 下一篇: leetcode 75 --- sort