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;
}
相關文章
- 劍指 Offer 32 - III. 從上到下列印二叉樹 III二叉樹
- LeetCode 劍指offer——從上到下列印二叉樹 II、從上到下列印二叉樹 IIILeetCode二叉樹
- 劍指 Offer 32 - I. 從上到下列印二叉樹(java解題)二叉樹Java
- 每日一練(19):從上到下列印二叉樹二叉樹
- 劍指 Offer 32 - II. 從上到下列印二叉樹 II 做題筆記二叉樹筆記
- 劍指offer刷題筆記-32.從上到下列印二叉樹 進階筆記二叉樹
- 從上到下遍歷二叉樹-Java二叉樹Java
- JZ32 從上往下列印二叉樹二叉樹
- 22.從上往下列印二叉樹二叉樹
- 【劍指offer】從上向下列印二叉樹二叉樹
- 自上而下列印二叉樹二叉樹
- Fragment從上到下進入效果Fragment
- JZ-022-從上往下列印二叉樹二叉樹
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- 列印二叉樹的所有路徑二叉樹
- 二叉樹實現按層 s型列印二叉樹
- [劍指offer] 把二叉樹列印成多行二叉樹
- 如何直觀形象地樹狀列印一棵二叉樹?二叉樹
- 《劍指offer》:[60]把二叉樹列印成多行二叉樹
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- JZ-059-按之字形順序列印二叉樹二叉樹
- 劍指offer(C++)——把二叉樹列印成多行C++二叉樹
- 二叉樹高頻題(下)二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 劍指offer--把二叉樹列印成多行(C++)二叉樹C++
- 257. Binary Tree Paths(列印二叉樹所有路徑)二叉樹
- 《劍指offer》:[61]按之字形順序列印二叉樹二叉樹
- 根據二叉樹的先序序列和中序序列還原二叉樹並列印後序序列二叉樹
- 二叉樹 & 二叉查詢樹二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉查詢樹(二叉排序樹)排序
- 從前序與中序構造二叉樹二叉樹
- 演算法題(三十七):按之字形順序列印二叉樹演算法二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹二叉樹