前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 117 Populating Next Right Pointers in Each Node II

Leetcode 117 Populating Next Right Pointers in Each Node II

作者头像
triplebee
发布2018-01-12 14:53:58
3400
发布2018-01-12 14:53:58
举报

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,

代码语言:javascript
复制
         1
       /  \
      2    3
     / \    \
    4   5    7

After calling your function, the tree should look like:

代码语言:javascript
复制
         1 -> NULL
       /  \
      2 -> 3 -> NULL
     / \    \
    4-> 5 -> 7 -> NULL

题意和116一样,只不过这里的树不保证每一个节点都有左右孩子。

找next的时候一定要找到有孩子的next才行,而且为了避免next的next没有连接的情况,应该先遍历右子树。

代码语言:javascript
复制
/**
 * 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) {
        if(!root) return ; 
        if(root->right)   
        {  
            TreeLinkNode *p=root;
            while(p->next)
            {
                p=p->next;
                if(p->left) 
                {
                    root->right->next=p->left;
                    break;
                }
                else if(p->right)
                {
                    root->right->next=p->right;
                    break;
                }
            }connect(root->right);  //先遍历右子树
        }
        if(root->left)   
        {  
            if(root->right) 
                root->left->next=root->right;
            else 
            {
                TreeLinkNode *p=root;
                while(p->next)
                {
                    p=p->next;
                    if(p->left) 
                    {
                        root->left->next=p->left;
                        break;
                    }
                    else if(p->right)
                    {
                        root->left->next=p->right;
                        break;
                    }
                }
            }
            connect(root->left); 
        }  
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档