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

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

时间:2023-04-01 13:36:38 Java

填充每个节点的下一个右节点指针II题目描述:给定一棵二叉树:structNode{intval;节点*左;节点*右;Node*next;}填充它的每个next指针,以便this指针指向它的下一个右节点。如果找不到下一个正确的节点,则将next指针设置为NULL。最初,所有下一个指针都设置为NULL。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。解法一:层序遍历的解法过程和LeetCode-116一模一样——填充每个节点的下一个右节点指针。现在想想,116题中提到了完美二叉树,应该会用到完美二叉树的一些性质。更好的解决方案,目前的解决方案是一般的二叉树解决方案。首先,如果root为空或者左右子节点都为空,则不需要处理next指针,直接返回root。否则,当二叉树有多个节点时,使用队列遍历二叉树,以便记录二叉树每一层的节点,然后依次处理当前层各节点的next指针。由于在处理过程中所有节点的顺序都没有改变,所以最终返回的是root。importcom.kaesar.leetcode.Node;importjava.util.LinkedList;importjava.util.Queue;publicclassLeetCode_117{/***处理方式同LeetCode-116-填充每个的下一个右节点指针node*@paramroot*@return*/publicstaticNodeconnect(Noderoot){//如果根为空或者左右节点为空,不用处理,直接返回根即可if(root==null){返回根;}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);根打印();连接(根);System.out.println();根打印();}}【每日留言】逃避压力是没有用的,只会让压力更加嚣张,勇敢面对吧

猜你喜欢