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
.
Note:
For example,
Given the following perfect binary tree,
1 / 2 3 / \ / 4 5 6 7
After calling your function, the tree should look like:
1 -> NULL / 2 -> 3 -> NULL / \ / 4->5->6->7 -> NULL
#include<iostream> #include<vector> #include<queue> using namespace std; struct TreeLinkNode { int val; TreeLinkNode *left, *right, *next; TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {} }; void connect(TreeLinkNode *root) { queue<pair<TreeLinkNode*,int>>Q; if (!root) return; Q.push(make_pair(root,0)); TreeLinkNode* Levelnode = new TreeLinkNode(0); int Curlevel = 0; while (!Q.empty()) { TreeLinkNode* tmp = Q.front().first; if (Q.front().second!=Curlevel){ Levelnode->next = NULL; Levelnode = tmp; Curlevel++; } else{ Levelnode ->next = tmp; Levelnode = Levelnode->next; } Q.pop(); if (tmp->left) Q.push(make_pair(tmp->left, Curlevel + 1)); if (tmp->right) Q.push(make_pair(tmp->right, Curlevel + 1)); } }
Populating Next Right Pointers in Each Node
原文地址:http://blog.csdn.net/li_chihang/article/details/44747809