您的位置:首页 > Web前端 > Node.js

[Leetcode 116, Medium] Populating Next Right Pointers in Each Node

2015-07-22 22:01 633 查看
Problem:

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

Analysis:

Solutions:

C++:

(I) Non-recursive:

void connect(TreeLinkNode *root) {
        if(root == NULL || (root->left == NULL && root->right == NULL))
            return;

        queue<TreeLinkNode *> node_queue;
        node_queue.push(NULL);
        TreeLinkNode *p_cur = root;
        vector<TreeLinkNode *> node_level;
        while(p_cur || !node_queue.empty()) {
            if(p_cur) {
                if(p_cur->left) {
                    node_queue.push(p_cur->left);
                    node_level.push_back(p_cur->left);
                }
                
                if(p_cur->right) {
                    node_queue.push(p_cur->right);
                    node_level.push_back(p_cur->right);
                }
            } else {
                node_queue.push(NULL);
                for(int i = 0; i < node_level.size() - 1; ++i)
                    node_level[i]->next = node_level[i + 1];
                node_level.clear();
            }
            
            p_cur = node_queue.front();
            node_queue.pop();
        }
    }
(II) Recursive:

void connect(TreeLinkNode *root) {
        if(root == NULL) 
            return;  
        if(root->left != NULL)  
            root->left->next = root->right;  
        if(root->right !=NULL)  
            root->right->next = root->next? root->next->left:NULL;  
        connect(root->left);  
        connect(root->right);  
    }
Java:

Python:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: