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

歡迎訪問 生活随笔!

生活随笔

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

java

剑指Offer(Java实现)按之字形顺序打印二叉树

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

題目描述

請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。

解題思路

方法一:利用兩個棧的輔助空間分別存儲奇數偶數層的節點,然后打印輸出。

方法二:使用鏈表的輔助空間來實現,然后,將結果ArrayList<ArrayList<>>中的偶數位置處的ArrayList<>進行逆序,最后打印輸出。

代碼實現

import java.util.ArrayList; import java.util.Stack;/* public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}} */ public class Solution {public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {ArrayList<ArrayList<Integer>> res = new ArrayList<>();if (null == pRoot) {return res;}Stack<TreeNode> s1 = new Stack<>();Stack<TreeNode> s2 = new Stack<>();s1.push(pRoot);int level = 1;while (!s1.empty() || !s2.empty()) {if (0 != level % 2) {ArrayList<Integer> nodeList = new ArrayList<>();while (!s1.empty()) {TreeNode node = s1.pop();nodeList.add(node.val);if (null != node.left) {s2.push(node.left);;}if (null != node.right) {s2.push(node.right);}}if (!nodeList.isEmpty()) {res.add(nodeList);level++;}} else {ArrayList<Integer> nodeList = new ArrayList<>();while (!s2.empty()) {TreeNode node = s2.pop();nodeList.add(node.val);if (null != node.right) {s1.push(node.right);;}if (null != node.left) {s1.push(node.left);}}if (!nodeList.isEmpty()) {res.add(nodeList);level++;}}}return res;}}

注意:

import java.util.ArrayList; import java.util.Stack;

使用 ArrayList、Stack 的數據結構時,需要導入相應的包。

TreeNode node = s1.pop(); if (null != node) {nodeList.add(node.val);s2.push(node.left);s2.push(node.right); }

在節點元素出棧的時候,需要進行 null 判斷,因為輸入時并非是完全二叉樹,層次遍歷時,可能存在空節點元素。

而且,此時是將奇數層的節點依次出棧,所以對于下一層偶數層 s2 的輸出而言,需要由左往右進行入棧,

當 s2 出棧時,順序才能為:由右向左。以此循環,直到 s1 與 s2棧中均為空。

總結

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

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