32 從上到下列印二叉樹
題目一:不分行從上到下列印二叉樹
public ArrayList<Integer> printTree(TreeNode root){
ArrayList<Integer> res = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
if (root == null){
return res;
}
queue.add(root);
while (!queue.isEmpty()){
if (queue.peek().left != null){
queue.add(queue.peek().left);
}
if (queue.peek().right != null){
queue.add(queue.peek().right);
}
res.add(queue.poll().val);
}
return res;
}
題目二:分行從上到下列印二叉樹
public ArrayList<ArrayList<Integer>> printTree(TreeNode root){
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
if (root == null){
return res;
}
queue.add(root);
int curLine = 1;
int nextLine = 0;
ArrayList<Integer> list = new ArrayList<>();
while (!queue.isEmpty()){
if (queue.peek().left != null){
queue.add(queue.peek().left);
nextLine++;
}
if (queue.peek().right != null){
queue.add(queue.peek().right);
nextLine++;
}
list.add(queue.poll().val);
curLine--;
if (curLine == 0){
curLine = nextLine;
nextLine = 0;
res.add(new ArrayList<>(list));
list.clear();
}
}
return res;
}
題目三:之字形列印二叉樹
public ArrayList<ArrayList<Integer>> printTree(TreeNode root){
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
Stack<TreeNode> stack0 = new Stack<>();
Stack<TreeNode> stack1 = new Stack<>();
if (root == null){
return res;
}
int dir = 1; //0代表從左向右列印,1代表從右向左列印
int curLine = 1;
int nextLine = 0;
stack0.push(root);
ArrayList<Integer> list = new ArrayList<>();
while (!stack0.isEmpty() || !stack1.isEmpty()){
if (dir == 1){
if (stack0.peek().left != null){
stack1.push(stack0.peek().left);
nextLine++;
}
if (stack0.peek().right != null){
stack1.push(stack0.peek().right);
nextLine++;
}
}else {
if (stack1.peek().right != null){
stack0.push(stack1.peek().right);
nextLine++;
}
if (stack1.peek().left != null){
stack0.push(stack1.peek().left);
nextLine++;
}
}
if (dir == 1){
list.add(stack0.pop().val);
}else {
list.add(stack1.pop().val);
}
curLine--;
if (curLine == 0){
curLine = nextLine;
nextLine = 0;
dir = (dir == 0 ? 1 : 0);
res.add(new ArrayList<>(list));
list.clear();
}
}
return res;
}
相關文章
- LeetCode 劍指offer——從上到下列印二叉樹 II、從上到下列印二叉樹 IIILeetCode二叉樹
- 劍指 Offer 32 - III. 從上到下列印二叉樹 III二叉樹
- 劍指 Offer 32 - I. 從上到下列印二叉樹(java解題)二叉樹Java
- 每日一練(19):從上到下列印二叉樹二叉樹
- 劍指offer刷題筆記-32.從上到下列印二叉樹 進階筆記二叉樹
- 劍指 Offer 32 - II. 從上到下列印二叉樹 II 做題筆記二叉樹筆記
- 從上到下遍歷二叉樹-Java二叉樹Java
- JZ32 從上往下列印二叉樹二叉樹
- 22.從上往下列印二叉樹二叉樹
- JZ-022-從上往下列印二叉樹二叉樹
- 自上而下列印二叉樹二叉樹
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- 二叉樹實現按層 s型列印二叉樹
- [劍指offer] 把二叉樹列印成多行二叉樹
- 如何直觀形象地樹狀列印一棵二叉樹?二叉樹
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- JZ-059-按之字形順序列印二叉樹二叉樹
- 二叉樹高頻題(下)二叉樹
- 劍指offer--把二叉樹列印成多行(C++)二叉樹C++
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 行從左到右遞增,列從上到下遞增,找目標值
- leetcode 102 劍指Offer 32 二叉樹的層次遍歷LeetCode二叉樹
- 演算法題(三十七):按之字形順序列印二叉樹演算法二叉樹
- 從前序與中序構造二叉樹二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹的簡單實戰 → 一起溫故下二叉樹的遍歷二叉樹
- 二叉樹二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 判斷二叉樹是否為滿二叉樹二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 自己動手作圖深入理解二叉樹、滿二叉樹及完全二叉樹二叉樹
- 從二分搜尋到二叉搜尋樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹