java編程題之從上往下打印出二叉樹
更新時(shí)間:2021年08月26日 08:58:07 作者:hasp_Jason
這篇文章主要為大家詳細(xì)介紹了java編程題之從上往下打印出二叉樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了java從上往下打印出二叉樹的具體代碼,供大家參考,具體內(nèi)容如下
github:劍指offer編程全部試題
import java.util.ArrayList;
import java.util.Stack;
/**
*
* 劍指offer編程題(JAVA實(shí)現(xiàn))——第22題:從上往下打印出二叉樹
*
* 題目描述
* 從上往下打印出二叉樹的每個(gè)節(jié)點(diǎn),同層節(jié)點(diǎn)從左至右打印。
*
*/
public class Test22 {
ArrayList<Integer> arrayList = new ArrayList<>();
// 每層依次入棧
Stack<TreeNode> stack1 = new Stack<>();
// 從stack1出棧的元素依次加入stack2,統(tǒng)一通過stack2找到他們的字節(jié)點(diǎn)并壓入stack1
Stack<TreeNode> stack2 = new Stack<>();
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
if (root == null) {
return arrayList;// 空則返回
}
stack1.push(root);
while (!stack1.isEmpty()) {
while (!stack1.isEmpty()) {
TreeNode tmp = stack1.pop();
arrayList.add(tmp.val);
stack2.push(tmp);
}
while (!stack2.isEmpty()) {
TreeNode tmp2 = stack2.pop();
// 從左到右打印,所以右子樹先入棧
if (tmp2.right != null) {
stack1.push(tmp2.right);
}
if (tmp2.left != null) {
stack1.push(tmp2.left);
}
}
}
return arrayList;
}
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
}
//其他方法
/**
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(root == null) return list;
Deque<TreeNode> deque = new LinkedList<TreeNode>();
deque.add(root);
while(!deque.isEmpty()){
TreeNode t = deque.pop();
list.add(t.val);
if(t.left != null) deque.add(t.left);
if(t.right != null) deque.add(t.right);
}
return list;
}
}
*/
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot中整合Shiro實(shí)現(xiàn)權(quán)限管理的示例代碼
這篇文章主要介紹了SpringBoot中整合Shiro實(shí)現(xiàn)權(quán)限管理的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Springboot整合Mybatis和SQLite的詳細(xì)過程
這篇文章主要介紹了Springboot整合Mybatis和SQLite的詳細(xì)過程,本文通過圖文示例相結(jié)合給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-07-07
詳解Java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)的兩種方式
在開發(fā)的過程中,很多業(yè)務(wù)場(chǎng)景需要一個(gè)樹形結(jié)構(gòu)的結(jié)果集進(jìn)行前端展示,也可以理解為是一個(gè)無限父子結(jié)構(gòu),常見的有報(bào)表指標(biāo)結(jié)構(gòu)、菜單結(jié)構(gòu)等,這篇文章主要介紹了Java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)的兩種方式,需要的朋友可以參考下2022-10-10
gateway和jwt網(wǎng)關(guān)認(rèn)證實(shí)現(xiàn)過程解析
這篇文章主要介紹了gateway和jwt網(wǎng)關(guān)認(rèn)證實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Java JDK 動(dòng)態(tài)代理的使用方法示例
Java 動(dòng)態(tài)代理機(jī)制以巧妙的方式近乎完美地實(shí)踐了代理模式的設(shè)計(jì)理念。下面這篇文章主要給大家分享了關(guān)于Java JDK 動(dòng)態(tài)代理的使用方法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07

