Leetcode Populating Next Right Pointers in Each Node II

来源:互联网 发布:阿里云解析dns 编辑:程序博客网 时间:2024/06/11 12:42

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 connect(TreeLinkNode *root) {        while(root)          {              TreeLinkNode* temp = new TreeLinkNode(0);            TreeLinkNode* cur = temp;            while(root)              {                if(root->left != NULL)                {                    cur->next = root->left;                    cur = cur->next;                }                if(root->right != NULL)                {                    cur->next = root->right;                    cur = cur->next;                }                root = root->next;            }                          root = temp->next;            temp->next = NULL;            delete temp;        }      }};


阅读全文
0 0
原创粉丝点击