码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode:Populating Next Right Pointers in Each Node

时间:2015-01-02 17:27:08      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

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,

         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

分析:此题是level-order traversal的变形,与level-order traversal不同的是该题要求constant space。一般的level-order traversal用一个容器保存上一层的节点是O(n)space complexity,所以这里不同直接照搬。分析此题,一个节点p的左孩子的next是节点p的右孩子,p的节点的右孩子的next是p的next节点的左孩子,由这个我们便可以通过只维护节点p来完成populate。时间复杂度为O(n),空间复杂度为O(1)。代码如下:
class Solution {
public:
    void connect(TreeLinkNode *root) {
        if(root == NULL) return;
        
        TreeLinkNode *head = root;//point to head of every level
        while(head->left && head->right){
            TreeLinkNode *cur = head;//iterate through each node in a level
            while(cur){
                cur->left->next = cur->right;
                cur->right->next = cur->next?cur->next->left:NULL;
                cur = cur->next;
            }
            head = head->left;//update head to left child of previous head
        }
    }
};

 

Leetcode:Populating Next Right Pointers in Each Node

标签:

原文地址:http://www.cnblogs.com/Kai-Xing/p/4198569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!