[LeetCode] Populating Next RIght Pointer in Each Node II

来源:互联网 发布:js array indexof ie8 编辑:程序博客网 时间:2024/05/12 11:43


Follow up for problem "Populating Next Right Pointers in Each Node".

What if the given tree could be any binary tree? Would your previous solution still work?

Note:

  • You may only use constant extra space.

For example,
Given the following binary tree,

         1       /  \      2    3     / \    \    4   5    7

After calling your function, the tree should look like:

         1 -> NULL       /  \      2 -> 3 -> NULL     / \    \    4-> 5 -> 7 -> NULL


Key: consider the case when the next pointer has no child.  Must find the following next pointers until one has a child. Populate from the right.

/** * 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 *root) {        // Note: The Solution object is instantiated only once and is reused by each test case.        if(root==NULL || (root->left==NULL && root->right==NULL))             return;                if(root->left!=NULL && root->right!=NULL)            root->left->next=root->right;                TreeLinkNode *rootLastChild;        if(root->right!=NULL)            rootLastChild=root->right;        else            rootLastChild=root->left;                TreeLinkNode *nextChild=NULL;                TreeLinkNode *rootNext=root->next;        while(rootNext!=NULL)        {            if(rootNext->left!=NULL)                nextChild=rootNext->left;            else if(rootNext->right!=NULL)                nextChild=rootNext->right;            if(nextChild != NULL)                break;            rootNext=rootNext->next;        }                if(nextChild != NULL)        {            rootLastChild->next=nextChild;        }                    connect(root->right);        connect(root->left);    }};


原创粉丝点击