leetcode 116填充每个节点的下一个右侧节点指针

time O(n) ,sapce O(n)

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;
    Node* next;

    Node() {}

    Node(int _val, Node* _left, Node* _right, Node* _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};
*/
/**
层序遍历,然后每一层左边节点指向右边节点,最后一个节点指向NULL
**/
class Solution {
public:
    Node* connect(Node* root) {
        if(root==NULL||root->left==NULL) return root;
        queue<Node*>q;
        q.push(root->left),q.push(root->right);
        while(!q.empty()){
            int k=q.size();
            Node* l,*r=q.front();
            q.pop();
            if(r->left) q.push(r->left),q.push(r->right);
            for(int i=1;i<k;i++){
                l=r,r=q.front();q.pop();
                l->next=r;
                if(r->left) q.push(r->left),q.push(r->right);
            }
        }
        return root;
    }
};

原文地址:https://www.cnblogs.com/joelwang/p/10920448.html

时间: 2024-10-10 21:15:55

leetcode 116填充每个节点的下一个右侧节点指针的相关文章

[LeetCode] 116. 填充每个节点的下一个右侧节点指针

题目链接 : https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 题目描述: 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则将 next

[leetcode-117]填充每个节点的下一个右侧节点指针 II

(1 AC) 填充每个节点的下一个右侧节点指针 I是完美二叉树.这个是任意二叉树 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则将 next 指针设置为 NULL. 初始状态下,所有 next 指针都被设置为 NULL. 示例:For example, Given the following binary tree

LeetCode OJ:Populating Next Right Pointers in Each Node II(指出每一个节点的下一个右侧节点II)

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 tr

LeetCode 第117题 填充每个节点的下一个右侧节点指针||

给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则将 next 指针设置为 NULL. 初始状态下,所有 next 指针都被设置为 NULL. 示例: 1 class Solution117 { 2 3 public Node connect(Node root) { 4 if (root == null) { 5 r

116.填充每个节点的下一个右侧节点指针(DFS)

2019-12-27 08:52:23 解法1:DFS 递归解决 /* // Definition for a Node. class Node { public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {

4.6 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针。

5 / 2 6 / \ 1 4 7 / 3 class Node{ Node left; Node right; Node parent; int val; } /** 1.如果有右子树,则结果为右子树的最左节点. 2.如果没有右子树,则需要回到父节点,如果当前节点是父节点的左子树,则父节点就是结果,如果不是继续向上再找父节点. */ public TreeNode inorderSucc(TreeNode n){ if(n==null) return null; if(n.right!=nul

找到下一个“元素节点”通用函数

//下一个元素节点通用函数 function getNextElement(node){ if(node.nodeType == 1){ return node; } //元素下一个节点,继续执行本次函数,循环,一直到找到下一个元素节点为止,则退出本次循环 if(node.nextSibling){         return getNextElement(node.nextSibling); } return null; }

[leetcode] 116. 填充同一层的兄弟节点

116. 填充同一层的兄弟节点 其实就是个二叉树的层次遍历 class Solution { public void connect(TreeLinkNode root) { if (root == null) return; LinkedList<TreeLinkNode> queue = new LinkedList<>(); queue.offer(root); TreeLinkNode flag = root; TreeLinkNode last = null; while

JS函数:返回下一个元素节点

1 //寻找先一个元素节点的函数,把一个元素的下一个节点(nextSibing)作为参数传给该函数,经过筛选返回元素节点 2 function nextElementSiblings(node){ 3 if(node.nodeType == 1){ 4 return node; 5 } 6 if(node.nextSibling){ 7 return nextElementSiblings(node.nextSibling); 8 } 9 return null; 10 }