Populating Next Right Pointers in Each Node II

来源:互联网 发布:石家庄java程序员招聘 编辑:程序博客网 时间:2024/04/28 22:06

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
/** * 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 findNextForLeft(TreeLinkNode *root){        if(!root || !root->left) return;                TreeLinkNode *cur = root;        TreeLinkNode *target = NULL;        if(root -> right){            target = root -> right;        }else{            while(cur -> next){                cur = cur -> next;                if(cur -> left){                    target = cur-> left;                    break;                }else if(cur -> right){                    target = cur -> right;                    break;                }            }                    }                root -> left -> next = target;    }        void findNextForRight(TreeLinkNode *root){        if(!root || !root->right) return;                TreeLinkNode *cur = root;        TreeLinkNode *target = NULL;        while(cur -> next){            cur = cur -> next;            if(cur -> left){                target = cur-> left;                break;            }else if(cur -> right){                target = cur -> right;                break;            }        }                            root -> right -> next = target;    }        void findNext(TreeLinkNode *root){        findNextForLeft(root);        findNextForRight(root);    }    void connect(TreeLinkNode *root) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if(!root) return;        root -> next = NULL;                queue<TreeLinkNode *> q;        q.push(root);        TreeLinkNode *cur;        while(!q.empty()){            cur = q.front();            q.pop();            if(cur -> left) q.push(cur -> left);            if(cur -> right) q.push(cur -> right);                        findNext(cur);        }            }};




原创粉丝点击