LeetCode 116. 填充每个节点的下一个右侧节点指针(递归循环)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 116. 填充每个节点的下一个右侧节点指针(递归循环)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 遞歸
- 2.2 循環
- 2.3 O(1)空間復雜度
1. 題目
給定一個完美二叉樹,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下:
struct Node {int val;Node *left;Node *right;Node *next; }填充它的每個 next 指針,讓這個指針指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指針設置為 NULL。
初始狀態下,所有 next 指針都被設置為 NULL
2. 解題
2.1 遞歸
class Solution { public:Node* connect(Node* root) {if(root == NULL || root->left == NULL)return root;root->left->next = root->right;if(root->next != NULL)root->right->next = root->next->left;connect(root->left);connect(root->right);return root;} };2.2 循環
class Solution { public:Node* connect(Node* root) {if(root == NULL || root->left == NULL)return root;queue<Node*> q;q.push(root);Node *p;int n;while(!q.empty()){n = q.size();while(n--){p = q.front();if(p->left != NULL){q.push(p->left);q.push(p->right);p->left->next = p->right;if(p->next != NULL)p->right->next = p->next->left;}q.pop();} }return root;} };2.3 O(1)空間復雜度
- 利用next指針
總結
以上是生活随笔為你收集整理的LeetCode 116. 填充每个节点的下一个右侧节点指针(递归循环)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1354. 多次求和构
- 下一篇: LeetCode 860. 柠檬水找零(