美文网首页
每个节点的右向指针

每个节点的右向指针

作者: 小白学编程 | 来源:发表于2018-09-26 23:26 被阅读0次

给定一个二叉树

struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

初始状态下,所有 next 指针都被设置为 NULL。

说明:

你只能使用额外常数空间。
使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
你可以假设它是一个完美二叉树(即所有叶子节点都在同一层,每个父节点都有两个子节点)。

思路

在层序遍历的基础上进行修改,遍历某一层,需注意是否遍历到该层最后一个节点

public class Solution {
    public void connect(TreeLinkNode root) {
        if(root!=null){
            Queue<TreeLinkNode> q=new LinkedList<TreeLinkNode>();
            q.offer(root);

            while(!q.isEmpty()){
                int size=q.size();
                int c=0;

                for(int i=0;i<size;++i){
                    TreeLinkNode temp=q.poll();
                    if(c==size-1){
                        temp.next=null;
                    }else{
                        temp.next=q.peek();
                    }
                    
                    if(temp.left!=null){
                        q.offer(temp.left);
                    }
                    if(temp.right!=null){
                        q.offer(temp.right);
                    }
                    c++;
                }
            }
        }
    }
}

思路

对于next为null,可以不做任何处理,该值会自动初始化为null

public class Solution {
    public void connect(TreeLinkNode root) {
        if(root==null){
            return ;
        }
        
        if(root.left!=null){
            root.left.next=root.right;
            if(root.next!=null){
                root.right.next=root.next.left;
            }
        }
        
        connect(root.left);
        connect(root.right);
    }
}

相关文章

  • 每个节点的右向指针

    给定一个二叉树 struct TreeLinkNode {TreeLinkNode *left;TreeLinkN...

  • 每个节点的右向指针

    给定一个二叉树 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 ne...

  • 9 - Medium - 每个节点的右向指针

    给定一个二叉树 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 ne...

  • 数据结构与算法11——线索二叉树

    概念 链式存储二叉树的时,每个节点都有一个左子树节点指针和一个右子树指针。当某个结点没有左子树和右子树的节点时,把...

  • LeetCode-116-填充每个节点的下一个右侧节点指针

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

  • 双线链表

    双向链表的特点:1、以节点为单位,每个节点有上个节点指针和下个节点指针2、至少包含头节点和尾节点3、添加节点时先改...

  • 链表-创建链表

    链表的每个节点分为指针域和数据域,创建链表的过程可以理解为将每个节点的指针域指向其他节点,最终形成一个链条,即链表...

  • 链表-单链表

    概念 n个节点离散分配 彼此通过指针相连 每个节点只有一个前驱节点,每个节点只有一个后续节点 首节点没有前驱节点,...

  • 链表

    定义 n 个节点离散分配; 彼此通过指针相连; 每个节点只有一个前驱节点,每个节点只有一个后续节点; 首节点没有前...

  • 数据结构总结

    链表 链表是一种由节点(Node)组成的线性数据集合,每个节点通过指针指针指向下一个节点。它是一种由节点组成,并能...

网友评论

      本文标题:每个节点的右向指针

      本文链接:https://www.haomeiwen.com/subject/zphsoftx.html