LeetCode:Populating Next Right Pointers in Each Node

问题叙述性说明:

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

思路:首先想到的是BFS。

可是BFS须要借助队列,这样就不能满足题目空间复杂度的要求。难点在于怎样不用多余的空间完毕树的遍历。

解决问题须要用到树节点结构中包括的next域。

能够借助next完毕不用队列的BFS。


代码:

void Solution::connect(TreeLinkNode * root)
{
    if(root == NULL)
        return;
    TreeLinkNode * cur;
    while(root->left != NULL)//当root->left为NULL时,表示已经遍历到了最后一层,此时已经完毕了全部next的赋值
    {
        cur = root;//在遍历每一层时,cur指针用来指向当前所要处理的节点
        while(cur != NULL)//cur为NULL时,表示当前这一层已经处理完
        {
            if(cur->left != NULL)
                cur->left->next = cur->right;//当前节点左子节点的next域指向当前节点的右子节点
            if(cur->next != NULL)
                cur->right->next = cur->next->left;//当前节点的右子节点的next域指向当前节点next域所指节点的左子节点
            cur = cur->next;
        }
        root = root->left;//开始处理一个新的水平
    }
}


版权声明:本文博客原创文章,博客,未经同意,不得转载。

posted @ 2015-08-17 14:02  phlsheji  阅读(157)  评论(0编辑  收藏  举报