Problem:
Solution:
/**
* 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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (root == NULL) {
return;
}
queue<TreeLinkNode *> queueTree;
TreeLinkNode *popedNode;
queueTree.push(root);
while (!queueTree.empty()) {
popedNode = queueTree.front();
queueTree.pop();
if (popedNode->left) {
popedNode->left->next = popedNode->right;
queueTree.push(popedNode->left);
}
if (popedNode->right) {
popedNode->right->next = (popedNode->next == NULL ? NULL : popedNode->next->left);
queueTree.push(popedNode->right);
}
}
return;
}
};
==============
class Solution {
public Node connect(Node root) {
if (root == null) {
return root;
}
// Start with the root node. There are no next pointers
// that need to be set up on the first level
Node leftmost = root;
// Once we reach the final level, we are done
while (leftmost.left != null) {
// Iterate the "linked list" starting from the head
// node and using the next pointers, establish the
// corresponding links for the next level
Node head = leftmost;
while (head != null) {
// CONNECTION 1
head.left.next = head.right;
// CONNECTION 2
if (head.next != null) {
head.right.next = head.next.left;
}
// Progress along the list (nodes on the current level)
head = head.next;
}
// Move onto the next level
leftmost = leftmost.left;
}
return root;
}
}
Given a binary tree
struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to
NULL
.
Initially, all next pointers are set to
NULL
.Solution:
/**
* 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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (root == NULL) {
return;
}
queue<TreeLinkNode *> queueTree;
TreeLinkNode *popedNode;
queueTree.push(root);
while (!queueTree.empty()) {
popedNode = queueTree.front();
queueTree.pop();
if (popedNode->left) {
popedNode->left->next = popedNode->right;
queueTree.push(popedNode->left);
}
if (popedNode->right) {
popedNode->right->next = (popedNode->next == NULL ? NULL : popedNode->next->left);
queueTree.push(popedNode->right);
}
}
return;
}
};
==============
class Solution {
public Node connect(Node root) {
if (root == null) {
return root;
}
// Start with the root node. There are no next pointers
// that need to be set up on the first level
Node leftmost = root;
// Once we reach the final level, we are done
while (leftmost.left != null) {
// Iterate the "linked list" starting from the head
// node and using the next pointers, establish the
// corresponding links for the next level
Node head = leftmost;
while (head != null) {
// CONNECTION 1
head.left.next = head.right;
// CONNECTION 2
if (head.next != null) {
head.right.next = head.next.left;
}
// Progress along the list (nodes on the current level)
head = head.next;
}
// Move onto the next level
leftmost = leftmost.left;
}
return root;
}
}
No comments:
Post a Comment