日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Leetcode][第117题][JAVA][填充每个节点的下一个右侧节点指针][BFS] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【問題描述】[中等]

【解答思路】

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]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。