填充每個節點的下一個右側節點指標
給定一個完美二叉樹,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下:
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指標
- LeetCode-117-填充每個節點的下一個右側節點指標 IILeetCode指標
- LeetCode117-填充每個節點的下一個右側節點指標 IILeetCode指標
- 刷題系列 - 在二叉樹中,為每個節點關聯其右相鄰節點二叉樹
- JavaScript 獲取下一個元素節點JavaScript
- MySQL:非葉子節點指標MySql指標
- [CareerCup] 13.7 Node Pointer 節點指標指標
- 008,二叉樹的下一個節點二叉樹
- 二叉樹兩個節點的公共節點二叉樹
- JavaScript獲取下一個同級元素節點JavaScript
- 給每一個結點新增向右的next指標結點指標
- 劍指offer 面試題 7 :二叉樹的下一個節點是什麼?面試題二叉樹
- RAC一個節點恢復另一個節點在帶庫上的備份
- css 定位如何依次定位多個節點下面的子節點CSS
- TCP 中的兩個細節點TCP
- 二叉樹節點個數,葉子個數,第K層個數,最低公共節點二叉樹
- dom4j 根據xml節點路徑查詢節點,找到對應的目標節點下的子節點,對節點Text值進行修改XML
- 關於RAC每個節點更改對應的記憶體引數記憶體
- Neo4j 查詢某標籤節點個數語句 刪除某標籤全部節點語句
- js如何克隆一個節點物件JS物件
- javascript如何建立一個文字節點JavaScript
- 將每個元素替換為右側最大元素
- 利用快慢指標快速得到連結串列中間節點指標
- 求遍歷網頁每一個節點的框架,最好是 python 寫的網頁框架Python
- JavaScript學習之DOM(節點、節點層級、節點操作)JavaScript
- redis cluster 強制kill某一個節點和shutdown某一個節點後修復過程Redis
- 刪除alwayson主節點一個表的統計資訊導致一個輔助節點的同步延遲
- 利用jQuery如何刪除一個節點jQuery
- Oracle兩個使用細節知識點Oracle
- K個節點翻轉連結串列
- 如何檢視客戶端登入的是多節點EBS中那個APP節點客戶端APP
- selenium-grid 有多個節點,但 pytest.main 批次執行用例,每次只有一個節點執行用例,不能同時多個節點執行,要怎樣才能多個節點同時執行AI
- 為什麼二叉樹中葉子節點個數等於度為2的節點個數+1二叉樹
- c 連結串列之 快慢指標 查詢迴圈節點指標
- 第 10 節 指標指標
- WebRTC本地插入多個轉發節點,模擬多節點轉發,造成延遲Web