填充每個節點的下一個右側節點指標
給定一個完美二叉樹,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每個 next 指標,讓這個指標指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指標設定為 NULL。
初始狀態下,所有 next 指標都被設定為 NULL。
示例:
輸入:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"1","left":{"id”:“2”,“left”:{“KaTeX parse error: Expected 'EOF', got '}' at position 53: …t":null,"val":4}̲,"next":null,"r…id”:“4”,“left”:null,“next”:null,“right”:null,“val”:5},“val”:2},“next”:null,“right”:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"5","left":{"id”:“6”,“left”:null,“next”:null,“right”:null,“val”:6},“next”:null,“right”:{"$id":“7”,“left”:null,“next”:null,“right”:null,“val”:7},“val”:3},“val”:1}
輸出:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"1","left":{"id”:“2”,“left”:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …:null,"next":{"id”:“4”,“left”:null,“next”:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …:null,"next":{"id”:“6”,“left”:null,“next”:null,“right”:null,“val”:7},“right”:null,“val”:6},“right”:null,“val”:5},“right”:null,“val”:4},“next”:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"7","left":{"ref”:“5”},“next”:null,“right”:{“KaTeX parse error: Expected 'EOF', got '}' at position 9: ref":"6"}̲,"val":3},"righ…ref”:“4”},“val”:2},“next”:null,“right”:{"$ref":“7”},“val”:1}
解釋:給定二叉樹如圖 A 所示,你的函式應該填充它的每個 next 指標,以指向其下一個右側節點,如圖 B 所示。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
思路:按照層序遍歷,使用對列進行輔助,將每行遍歷到的第一個節點單獨統計,後面的節點讓前一個節點的next值指向當前節點。最後一個節點設定為空。
/*
// Definition for a Node.
class Node {
public:
int val;
Node* left;
Node* right;
Node* next;
Node() : val(0), left(NULL), right(NULL), next(NULL) {}
Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}
Node(int _val, Node* _left, Node* _right, Node* _next)
: val(_val), left(_left), right(_right), next(_next) {}
};
*/
class Solution {
public:
Node* connect(Node* root) {
queue<Node*>qu;
Node* node;
Node* prenode;
if(root!=nullptr) qu.push(root);
while(!qu.empty())
{
int size=qu.size();
for(int i=0;i<size;i++)
{
if(i==0)
{
prenode=qu.front();
qu.pop();
node=prenode;
}
else
{
node=qu.front();
qu.pop();
prenode->next=node;
prenode=prenode->next;
}
if(node->left) qu.push(node->left);
if(node->right) qu.push(node->right);
}
prenode->next=nullptr;
}
return root;
}
};
相關文章
- 填充每個節點的下一個右側節點指標 II指標
- 116. 填充每個節點的下一個右側節點指標指標
- LeetCode-116-填充每個節點的下一個右側節點指標LeetCode指標
- LeetCode117-填充每個節點的下一個右側節點指標 IILeetCode指標
- LeetCode-117-填充每個節點的下一個右側節點指標 IILeetCode指標
- 刷題系列 - 在二叉樹中,為每個節點關聯其右相鄰節點二叉樹
- JavaScript 獲取下一個元素節點JavaScript
- 008,二叉樹的下一個節點二叉樹
- 給每一個結點新增向右的next指標結點指標
- MySQL:非葉子節點指標MySql指標
- 1019. 連結串列中的下一個更大節點
- 連結串列中的節點每k個一組翻轉
- 劍指offer 面試題 7 :二叉樹的下一個節點是什麼?面試題二叉樹
- TCP 中的兩個細節點TCP
- css 定位如何依次定位多個節點下面的子節點CSS
- 劍指Offer-38-兩個連結串列的第一個公共節點
- 【劍指offer】【3】輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
- dom4j 根據xml節點路徑查詢節點,找到對應的目標節點下的子節點,對節點Text值進行修改XML
- 求遍歷網頁每一個節點的框架,最好是 python 寫的網頁框架Python
- 將每個元素替換為右側最大元素
- [連結串列]leetcode1019-連結串列中的下一個更大節點LeetCode
- 兩個連結串列的第一個公共節點
- 如何執行一個 Conflux 節點UX
- 力扣 - 劍指 Offer 52. 兩個連結串列的第一個公共節點力扣
- selenium-grid 有多個節點,但 pytest.main 批次執行用例,每次只有一個節點執行用例,不能同時多個節點執行,要怎樣才能多個節點同時執行AI
- redis cluster 強制kill某一個節點和shutdown某一個節點後修復過程Redis
- JavaScript學習之DOM(節點、節點層級、節點操作)JavaScript
- K個節點翻轉連結串列
- 為什麼二叉樹中葉子節點個數等於度為2的節點個數+1二叉樹
- 自定義有多個按鈕節點的SliderViewIDEView
- DOM(文件物件模型)的12個節點型別物件模型型別
- WebRTC本地插入多個轉發節點,模擬多節點轉發,造成延遲Web
- Linux--檔案描述符、檔案指標、索引節點Linux指標索引
- 第 10 節 指標指標
- DocumentFragment文件碎片(高效批量更新多個節點)Fragment
- js用字首名查詢class或id節點,js模糊查詢某個dom節點JS
- leetcode------給定一個二叉樹和一個值sum,判斷是否有從根節點到葉子節點的節點值之和等於sum 的路徑,LeetCode二叉樹
- 【許曉笛】EOS 超級節點的五個使命