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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

剑指Offer(Java实现)把二叉树打印成多行

發布時間:2025/4/16 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指Offer(Java实现)把二叉树打印成多行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。

解題思路

利用輔助空間鏈表或隊列來存儲節點,每層輸出。

代碼實現

import java.util.ArrayList; import java.util.LinkedList;/* public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}} */ public class Solution {ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {ArrayList<ArrayList<Integer>> res = new ArrayList<>();if (null == pRoot) {return res;}LinkedList<TreeNode> queue = new LinkedList<>();queue.offer(pRoot);ArrayList<Integer> list = new ArrayList<>();int start = 0;int end = 1;while (!queue.isEmpty()) {TreeNode node = queue.pop();start++;list.add(node.val);if (null != node.left) {queue.offer(node.left); // 也可用 queue.add(node.left);}if (null != node.right) {queue.offer(node.right); // 也可用 queue.add(node.right);}if (start == end) {start = 0;end = queue.size();res.add(new ArrayList<>(list));list.clear();}}return res;} }

注意

if (start == end) {start = 0;end = queue.size();res.add(new ArrayList<>(list));list.clear(); }

start 用于記錄當前節點在其所在層中的位置;end 用于記錄當前節點所在層的節點個數。

當 start == end 時,則說明當前層的節點都以記錄完成,存入ArrayList中;此時,需要將start重新設為0,而且,當前隊列中剩余元素皆為下一層中的節點,故需要將end設置為 queue.size(),并清除list,等待下一次遍歷的節點存儲。

if (null != node.left) {queue.offer(node.left); // 也可用 queue.add(node.left); } if (null != node.right) {queue.offer(node.right); // 也可用 queue.add(node.right); }

offer屬于 offer in interface Deque<E>,add 屬于 add in interface Collection<E>。

當隊列為空時候,使用add方法會報錯,而offer方法會返回false。

作為List使用時,一般采用add / get方法來 壓入/獲取對象。

作為Queue使用時,才會采用 offer/poll/take等方法作為鏈表對象時,offer等方法相對來說沒有什么意義這些方法是用于支持隊列應用的。

總的上來說,add() 與 offer() 基本情況可以通用。

總結

以上是生活随笔為你收集整理的剑指Offer(Java实现)把二叉树打印成多行的全部內容,希望文章能夠幫你解決所遇到的問題。

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