首页 > 其他 > 详细

Populating Next Right Pointers in Each Node 2

时间:2019-12-06 22:15:07      阅读:89      评论:0      收藏:0      [点我收藏+]

描述:

  给定一个二叉树
struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。

解答:

   本题相较于上一题,缺少了要操作的树为完全二叉树的条件。因此在寻找同一层次上的next节点时候,节点不一定仅仅

存在于当前的节点的cur->next->left或者是cur->right的位置,这两个位置现在都可能为空,因此可能要在一层上一直向右

寻找第一个next节点。具体的递归代码如下:

  

class Solution {
public:
    Node* connect(Node* root) {
        if (!root) return NULL;
        Node *p = root->next;
        while (p) {//向右一直寻找到第一个next节点
            if (p->left) {
                p = p->left;
                break;
            }
            if (p->right) {
                p = p->right;
                break;
            }
            p = p->next;
        }
        if (root->right) root->right->next = p; 
        if (root->left) root->left->next = root->right ? root->right : p; 
        connect(root->right);
        connect(root->left);
        return root;
    }
};

 

Populating Next Right Pointers in Each Node 2

原文:https://www.cnblogs.com/wangkaia/p/11998912.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!