当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 21:06:23 Java

填充每个节点的下一个右节点指针题目描述:给定一棵完美二叉树,它的所有叶子节点都在同一层,每个父节点每个节点有两个子节点。二叉树定义如下:structNode{intval;节点*左;节点*右;Node*next;}填充它的每一个next指针,使这个指针指向它的下一个右节点。如果找不到下一个正确的节点,则将next指针设置为NULL。最初,所有下一个指针都设置为NULL。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:层序遍历首先,如果根为空或者左右子节点为空,则不需要处理next指针,直接返回根。否则,当二叉树有多个节点时,使用队列遍历二叉树,以便记录二叉树每一层的节点,然后依次处理当前层各节点的next指针。由于在处理过程中所有节点的顺序都没有改变,所以最终返回的是root。importcom.kaesar.leetcode.Node;importjava.util.LinkedList;importjava.util.Queue;publicclassLeetCode_116{publicstaticNodeconnect(Noderoot){//如果根为空或者左右节点都为空,不需要处理,直接返回rootif(root==null){returnroot;}if(root.left==null&&root.right==null){returnroot;}//使用队列记录每一层的节点Queuenodes=newLinkedList<>();节点。添加(根);while(!nodes.isEmpty()){intcount=nodes.size();节点last=nodes.poll();if(last.left!=null){nodes.add(last.left);}if(last.right!=null){nodes.add(last.right);}count--;//处理每一层节点的next指针while(count>0){NodecurNode=nodes.poll();如果(curNode.left!=null){nodes.add(curNode.left);}if(curNode.right!=null){nodes.add(curNode.right);}last.next=curNode;最后=当前节点;数数-;}}返回根;}publicstaticvoidmain(String[]args){//测试用例Noderoot=newNode(1);root.left=新节点(2);root.right=新节点(3);//在处理之前root.print();连接(根);System.out.println();//处理完root.print();}}【每日寄语】努力学习,天天向上

猜你喜欢