Populating Next Right Pointers in Each Node II

原创 2015年11月21日 00:43:24

题目: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


思路:

这一题的思路更为巧妙,我觉得现在尤其注意一点 ,在链表开头加上一个空链表是一个非常好的方法。

对于本题,我似乎忽视的一点就是,对于当前层次的节点,是默认为右边是链接好的,而之前的一个类似题目,是判断当前节点的next 的了的。这个是区别。

具体思路是:在每一层之前加上一个dummy ,如果当前节点存在左孩子,dummy 指向左孩子,存在右孩子,tail 首先指向 下一个,再指向右孩子。直到当前节点为空。

接下来就是之前的dummy 设为当前节点,如此循环反复。

代码:

/**
 * 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 *dummy=new TreeLinkNode(0);
        
        if(root==NULL)  return;
        
        while(root!=NULL){
            TreeLinkNode *tail=dummy;
            while(root!=NULL){
                if(root->left){
                    tail->next=root->left;
                    tail=tail->next;
                }
                if(root->right){
                    tail->next=root->right;
                    tail=tail->next;
                }
                root=root->next;
            }
            root=dummy->next;
            dummy->next=NULL;//如果没有这句话,那么dummy只是上面那一层的
        }
        delete dummy;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

【LeetCode从零单刷】Populating Next Right Pointers in Each Node I & II

菜鸡从零单刷 LeetCode 系列

LeetCode算法题目:Populating Next Right Pointers in Each Node II

题目: Follow up for problem “Populating Next Right Pointers in Each Node”. What if the given tree...

Leetcode Populating Next Right Pointers in Each Node II

Populating Next Right Pointers in Each Node II   What if the given tree could be any binary tree? Wo...

[LeetCode]problem 117. Populating Next Right Pointers in Each Node II

TAG层序遍历 - 常量空间,通过next指针二叉树link方法有了Populating next right pointers in each node I的铺垫,这道题就显得没有任何思维上的限制了...

LeetCode | Populating Next Right Pointers in Each Node II(将每一层链接成一个链表)

Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tree could...

leetcode -- Populating Next Right Pointers in Each Node I&II -- 再看简单常考

Populating Next Right Pointers in Each Nodehttps://leetcode.com/problems/populating-next-right-point...
  • xyqzki
  • xyqzki
  • 2015年12月16日 22:05
  • 266

Populating Next Right Pointers in Each Node II

/** * Definition for binary tree with next pointer. * public class TreeLinkNode { * int val; ...

LeetCode_Tree_Populating Next Right Pointers in Each Node I II

Populating Next Right Pointers in Each Node I一、题目说明如图所说,将二叉树中每一层作指向。二、解题思路按层级遍历树的节点,使得横向前节点指向后节点。然后再...
  • glDemo
  • glDemo
  • 2015年09月06日 21:13
  • 434

Populating Next Right Pointers in Each Node II--LeetCode

题目: Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tree c...

populating-next-right-pointers-in-each-node II

I Populate each next pointer to point to its next right node. If there is no next right node, the ne...
  • ld851
  • ld851
  • 2017年08月08日 21:49
  • 50
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Populating Next Right Pointers in Each Node II
举报原因:
原因补充:

(最多只允许输入30个字)