提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
3月6日练习内容
提示:以下是本篇文章正文内容,下面案例可供参考
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node {int val;Node *left;Node *right;Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
示例 1:
输入:root = [1,2,3,4,5,6,7]
输出:[1,#,2,3,#,4,5,6,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。
示例 2:
输入:root = []
输出:[]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/populating-next-right-pointers-in-each-node
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1.本题可以使用BFS搜索的方法进行从上到下,从左到右的遍历二叉树
2.创建队列,将每层结点放入队列
3.获取前一个结点,接着遍历每层二叉树,当前一个结点不为空的时候,将前一个结点的next指向当前结点
4.更新前一个结点,并把当前结点的左子树与右子树放入队列
5.输出
代码如下(示例):
/*
// Definition for a Node.
class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, Node _left, Node _right, Node _next) {val = _val;left = _left;right = _right;next = _next;}
};
*/class Solution {public Node connect(Node root) {//判断输入是否为空if(root == null){return null;}//队列存储元素Queue que = new LinkedList<>();//将根结点加入队列que.add(root);while(!que.isEmpty()){//前一个结点Node pre = null;//获取每层的元素个数int size = que.size();for(int i = 0;i < size;i ++){//获取当前i处结点Node curr = que.poll();if(pre != null){//前一个结点的next指向当前结点pre.next = curr;}//更新pre的值pre = curr;if(curr.left != null){que.add(curr.left);}if(curr.right != null){que.add(curr.right);}}}return root;}
}
提示:这里对文章进行总结: