Description:
Given a binary tree
struct TreeLinkNode {
int val;
TreeLinkNode *left, *right, *next;
TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
};
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:
• You may only use constant extra space.
• You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent
has two children).
For example, Given the following perfect binary tree,
After calling your function, the tree should look like:
代码:
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
#define Elementype int
using namespace std;
int index = 0;
typedef struct TreeNode //树结点
{
Elementype val;
TreeNode *left;
TreeNode *right;
TreeNode *next;
TreeNode(Elementype x) : val(x), left(nullptr), right(nullptr),next(nullptr) {}
} *Tree;
//使用先序遍历创建创建二叉树
void MakeBinaryTree(Tree &T, Elementype value[])
{
Elementype c = value[index++];
if (c == '#')
T = nullptr;
else
{
T = new TreeNode(c);
MakeBinaryTree(T->left, value);
MakeBinaryTree(T->right, value);
}
}
//先序遍历
void preOrderTraversal(Tree root)
{
stack<Tree> sk;
Tree p = root;
if (p)
sk.push(p);
while (!sk.empty())
{
p = sk.top();
cout << p->val;
if (p->next)
cout << "的next节点是:" << p->next->val << " ";
else
cout << "的next结点为空" << " ";
sk.pop();
if (p->right)
sk.push(p->right);
if (p->left)
sk.push(p->left);
}
}
void populateNextRightPointers(Tree root, Tree brother)
{
if (!root)
return;
else
root->next = brother;
populateNextRightPointers(root->left, root->right);
if (brother)
populateNextRightPointers(root->right, brother->left);
else
populateNextRightPointers(root->right, nullptr);
}
int main()
{
Tree root = nullptr; //根结点
Elementype data[] = { 1, 2, 4, '#', '#', 5, '#', '#', 3, 6, '#', '#', 7, '#', '#' };
MakeBinaryTree(root, data);
populateNextRightPointers(root, nullptr);
cout << "先序遍历: ";
preOrderTraversal(root);
cout << endl;
system("pause");
return 0;
}
测试: