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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[Leedcode][JAVA][第102题][二叉树的层序遍历][递归][迭代][BFS]

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Leedcode][JAVA][第102题][二叉树的层序遍历][递归][迭代][BFS] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【問題描述】[第102題][二叉樹的層序遍歷][中等]

給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。示例: 二叉樹:[3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回其層次遍歷結果:[[3],[9,20],[15,7] ]

【解答思路】

典型BFS

1.隊列
  • 一層一層入隊,統計每層數量
  • 當前層出隊,下一層入隊
    時間復雜度:O(N^2) 空間復雜度:O(1)
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null) return res;Deque<TreeNode> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) {List<Integer> tmp = new ArrayList<>();//每一層的數量int cnt = queue.size();for (int i = 0; i < cnt; i++) {TreeNode node = queue.poll();// System.out.println(node.val);tmp.add(node.val);if (node.left != null) queue.add(node.left);if (node.right != null) queue.add(node.right);}//所有出完之后 添加listres.add(tmp);}return res;} }
2. 遞歸

helper(res, root, 0);
0代表層數 也代表列表的下標
時間復雜度:O(N) 空間復雜度:O(1)

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();helper(res, root, 0);return res;}private void helper(List<List<Integer>> res, TreeNode root, int depth) {if (root == null) return;if (res.size() == depth) res.add(new LinkedList<>());res.get(depth).add(root.val);helper(res, root.left, depth + 1);helper(res, root.right, depth + 1);} }

【總結】

1.模板

DFS 遍歷使用遞歸

void dfs(TreeNode root) {if (root == null) {return;}dfs(root.left);dfs(root.right); }

BFS遍歷使用模板(層次遍歷 最短路徑)

void bfs(TreeNode root) {Queue<TreeNode> queue = new ArrayDeque<>();queue.add(root);while (!queue.isEmpty()) {TreeNode node = queue.poll(); // Java 的 pop 寫作 poll()if (node.left != null) {queue.add(node.left);}if (node.right != null) {queue.add(node.right);}} }
2.二叉樹遍歷

前序遍歷 先輸出當前結點的數據,再依次遍歷輸出左結點和右結點
中序遍歷 先遍歷輸出左結點,再輸出當前結點的數據,再遍歷輸出右結點
后續遍歷 先遍歷輸出左結點,再遍歷輸出右結點,最后輸出當前結點的數據


參考鏈接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/di-gui-he-die-dai-by-powcai-2/

總結

以上是生活随笔為你收集整理的[Leedcode][JAVA][第102题][二叉树的层序遍历][递归][迭代][BFS]的全部內容,希望文章能夠幫你解決所遇到的問題。

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