116. Populating Next Right Pointers in Each Node

来源:互联网 发布:在linux执行shell 编辑:程序博客网 时间:2024/06/04 20:23

题目:Populating Next Right Pointers in Each Node

原题链接:https://leetcode.com/problems/populating-next-right-pointers-in-each-node/
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:

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,
p1
After calling your function, the tree should look like:
p2

给出一个二叉树,将其每层的节点串联起来,每个节点的 next() 依次指向其右边一遍节点,每一层的最右节点指向NULL,
初始每个节点的next() 都指向NULL,
注意:只能使用常数级额外空间,并且题目保证这棵树是一颗完全二叉树。

由于题目说明了这颗树是一颗完全二叉树,那么对于同一个节点下的左右孩子,每次让左孩子的next()指向右孩子,右孩子的next() 指向父亲节点的next()节点的左孩子,如果不存在则指向NULL。

代码如下:

/** * 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 *r) {        if (!r) return;        if (r->left) r->left->next = r->right;        if (r->right) r->right->next = (r->next)? r->next->left : NULL;        connect(r->left);        connect(r->right);    }};
0 0
原创粉丝点击