Populating Next Right Pointers in Each Node 2

心已入冬 提交于 2019-12-06 21:59:32

描述:

  给定一个二叉树
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;
    }
};

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!