Populating Next Right Pointers in Each Node

来源:互联网 发布:网络视频直播设备 编辑:程序博客网 时间:2024/05/16 09:18

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
这道题难点就在上面红色表明的部分。不然就可以像前面那样,每一level的进行修改。

其实我们从题中可以发现,一个节点  它的左子树的next是他的右子树,右子树的next是它next节点的左子树。也就是说当我将这一层的next都排完的时候,我下一层的next也自然很容易得到。于是我就用root来保存每一层最左边的节点,来完成当前level的next

/** * 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) {        TreeLinkNode *current;        if(root==NULL) return;                while(root->left!=NULL)        {            current = root;            while(current!=NULL)            {                current->left->next = current->right;                if(current->next!=NULL)                    current->right->next = current->next->left;                current = current->next;            }            root = root->left;        }    }};



0 0
原创粉丝点击