117. Populating Next Right Pointers in Each Node II

来源:互联网 发布:数据质量评估 编辑:程序博客网 时间:2024/05/16 07:25

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

不同于上一题,这题的二叉树并不是完全二叉树,我们不光需要提供first指针用来表示一层的第一个元素,同时也需要使用另一个lst指针表示该层上一次遍历的元素。那么我们只需要处理好如何设置last的next指针就可以了。

代码如下:

class Solution {public:    void connect(TreeLinkNode *root) {        if(!root) {            return;        }        TreeLinkNode* p = root;        TreeLinkNode* first = NULL;        TreeLinkNode* last = NULL;        while(p) {            //设置下层第一个元素            if(!first) {                if(p->left) {                    first = p->left;                } else if(p->right) {                    first = p->right;                }            }            if(p->left) {                //如果有last,则设置last的next                if(last) {                    last->next = p->left;                }                //last为left                last = p->left;            }            if(p->right) {                //如果有last,则设置last的next                if(last) {                    last->next = p->right;                }                //last为right                last = p->right;            }            //如果有next,则转到next            if(p->next) {                p = p->next;            } else {                //转到下一层                p = first;                last = NULL;                first = NULL;            }        }    }};

9.14

------------

 这道题的关键之处就在于想清楚最后两层。!!!!!!

0 0
原创粉丝点击