leetcode----给定一棵任意二叉树,填充所有节点的next指针,指向它右兄弟节点。如果没有右兄弟节点,则应该将next指针设置为NULL。

题目描述

继续思考"Populating Next Right Pointers in Each Node".这道题

给定一个二叉树

    struct TreeLinkNode {↵      TreeLinkNode *left;↵      TreeLinkNode *right;↵      TreeLinkNode *next;↵    }

填充所有节点的next指针,指向它右兄弟节点。如果没有右兄弟节点,则应该将next指针设置为NULL。

初始时,所有的next指针都为NULL。

 

如果给定的树可以是任意的二叉树呢?你之前的给出的算法还有效吗?

注意:

  • 你只能使用常量的额外内存空间

例如:

给出的二叉树如下:

         1↵       /  ↵      2    3↵     /     ↵    4   5    7

调用完你给出的函数之后,这棵树应该变成:

         1 -> NULL↵       /  ↵      2 -> 3 -> NULL↵     /     ↵    4-> 5 -> 7 -> NULL

方法一:使用队列

public void connect(TreeLinkNode root) {
        if(root==null){
            return;
        }
        Queue<TreeLinkNode> Q = new LinkedList<TreeLinkNode>();
        Q.add(root);
        while(!Q.isEmpty()){
            int len = Q.size();
            for(int i=0;i<len;i++){
               TreeLinkNode temp = Q.poll();
               if(temp.left!=null){
                   Q.add(temp.left);
               }
               if(temp.right!=null){
                   Q.add(temp.right);
                }
                if(i!=len-1){
                    temp.next = Q.peek();
                }
            }//for
        }//while
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值