【问题描述】[中等]

【解答思路】

1. 层次遍历
    public Node connect(Node root) {if (root == null)return root;Queue<Node> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) {//每一层的数量int levelCount = queue.size();//前一个节点Node pre = null;for (int i = 0; i < levelCount; i++) {//出队Node node = queue.poll();//如果pre为空就表示node节点是这一行的第一个,//没有前一个节点指向他,否则就让前一个节点指向他if (pre != null) {pre.next = node;}//然后再让当前节点成为前一个节点pre = node;//左右子节点如果不为空就入队if (node.left != null)queue.add(node.left);if (node.right != null)queue.add(node.right);}}return root;}
2. 层次遍历改进



    public Node connect(Node root) {if (root == null)return root;//cur我们可以把它看做是每一层的链表Node cur = root;while (cur != null) {//遍历当前层的时候,为了方便操作在下一//层前面添加一个哑结点(注意这里是访问//当前层的节点,然后把下一层的节点串起来)Node dummy = new Node(0);//pre表示访下一层节点的前一个节点Node pre = dummy;//然后开始遍历当前层的链表while (cur != null) {if (cur.left != null) {//如果当前节点的左子节点不为空,就让pre节点//的next指向他,也就是把它串起来pre.next = cur.left;//然后再更新prepre = pre.next;}//同理参照左子树if (cur.right != null) {pre.next = cur.right;pre = pre.next;}//继续访问这样行的下一个节点cur = cur.next;}//把下一层串联成一个链表之后,让他赋值给cur,//后续继续循环,直到cur为空为止cur = dummy.next;}return root;}

【总结】

1. 二叉树的遍历8种

前序遍历
中序遍历
后续遍历
深度优先搜索(DFS)
宽度优先搜索(BFS)
除了上面介绍的5种以外,还有Morris(莫里斯)的前中后3种遍历方式,总共也就这8种。所以只要遇到二叉树相关的算法题,首先想到的就是上面的几种遍历方式,然后再稍加修改,基本上也就这个套路。

2.层次遍历模板
    public void levelOrder(TreeNode tree) {if (tree == null)return;Queue<TreeNode> queue = new LinkedList<>();queue.add(tree);//相当于把数据加入到队列尾部while (!queue.isEmpty()) {//poll方法相当于移除队列头部的元素TreeNode node = queue.poll();System.out.println(node.val);if (node.left != null)queue.add(node.left);if (node.right != null)queue.add(node.right);}}

转载链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/solution/bfsjie-jue-zui-hao-de-ji-bai-liao-100de-yong-hu-by/

[Leetcode][第117题][JAVA][填充每个节点的下一个右侧节点指针][BFS]相关推荐

  1. 2.<tag-二叉树和层序遍历相关题>-lt.116. 填充每个节点的下一个右侧节点指针 + lt.117. 填充每个节点的下一个右侧节点指针 II 1

    lt.116. 填充每个节点的下一个右侧节点指针 [案例需求] [思路分析一, 迭代法] [代码实现] /* // Definition for a Node. class Node {public ...

  2. 二叉树:填充每个节点的下一个右侧节点指针(java)

    leetcode116:填充每个节点的下一个右侧节点指针 leetcode原题链接: 题目描述 递归解法一 递归方法二(效率更高) 二叉树专题 leetcode原题链接: 116题:填充每个节点的下一 ...

  3. 力扣116. 填充每个节点的下一个右侧节点指针(C++,附思路)

    题目链接在这里: 116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/popu ...

  4. [leetcode-117]填充每个节点的下一个右侧节点指针 II

    (1 AC) 填充每个节点的下一个右侧节点指针 I是完美二叉树.这个是任意二叉树 给定一个二叉树 struct Node {int val;Node *left;Node *right;Node *n ...

  5. leetcode116. 填充每个节点的下一个右侧节点指针

    116. 填充每个节点的下一个右侧节点指针 难度中等128 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node {int val;Node ...

  6. 116. 填充每个节点的下一个右侧节点指针

    2020-05-28 1.题目描述 填充每个节点的下一个右侧节点指针 2.题解 层次遍历即可 3.代码 /* // Definition for a Node. class Node { public ...

  7. 力扣 填充每个节点的下一个右侧节点指针

    填充每个节点的下一个右侧节点指针 题目描述 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left ...

  8. LeetCode 117. 填充每个节点的下一个右侧节点指针 II(递归循环)

    文章目录 1. 题目 2. 解题 2.1 递归 2.2 queue循环 2.3 利用next循环 1. 题目 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则 ...

  9. 49. Leetcode 117. 填充每个节点的下一个右侧节点指针 II (二叉树-二叉树遍历)

    给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不 ...

  10. [leetcode] 117 填充每个节点的下一个右侧节点指针

    给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node {   int val;   Node *left;   Node *right; ...

最新文章

  1. nginx 转发慢_为啥 Nginx 能轻松淦到几万并发?
  2. SpringMVC @RequestBody接收Json对象字符串
  3. android setContentView()
  4. Javascript教程:AngularJS的五个超酷特性
  5. 初二计算机辅导记录,(初中信息技术兴趣小组活动记录.doc
  6. Python学到什么程度才可以去找工作?
  7. python3 mysql同步_MySQL上云同步脚本-Python3
  8. 程序员的3年之痒改变的不止薪水(转载)
  9. TIOBE 1 月榜单:Python年度语言四连冠,C 语言再次第一
  10. SAS宏保存以便快速调用的三种解决方案(转载)
  11. leetCode-995:K 连续位的最小翻转次数
  12. 人走茶凉!三星关闭最后一家中国手机工厂 因为打不过其他国产厂商?
  13. Java多个注解合并_Java注解合并,注解继承
  14. oracle 12c 备份pdb下数据库
  15. php -- 目录、路径、磁盘
  16. mysql explain和profiling
  17. qtp测试 java web_QTP之web常用对象
  18. 关于给电鼓音源增加鼓盘或者DIY鼓盘(DIY镲片)的方法
  19. 常见电商项目的数据库表设计(MySQL版)
  20. 写一个VSCode插件

热门文章

  1. mysql string types ---- mysql 字符类型详解
  2. python selenium与自动化
  3. testNG之组测试
  4. lighttpd,thttpd,shttpd - 轻量级WebServer介绍
  5. 所谓语音合成 是计算机根据语言学,计算语言学完整1
  6. uoni扫地机器人好用吗_扫地机器人好用吗?了解性能看这篇
  7. Android char数据类型乱码��解决方法
  8. No field gDefault in class Landroid/app/ActivityManagerNative
  9. 微信 wx.chooseImage 上传图片 的思考
  10. react元素显隐控制