//给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
//
// 例如:
//给定二叉树 [3,9,20,null,null,15,7],
//
// 3
// / \
// 9 20
// / \
// 15 7
//
//
// 返回其自底向上的层次遍历为:
//
// [
// [15,7],
// [9,20],
// [3]
//]
//
// Related Topics 树 广度优先搜索
// 👍 360 👎 0
package leetcode.editor.cn;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
//Java:二叉树的层次遍历 II
public class P107BinaryTreeLevelOrderTraversalIi {
public static void main(String[] args) {
Solution solution = new P107BinaryTreeLevelOrderTraversalIi().new Solution();
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
ArrayList<List<Integer>> res = new ArrayList<>();
if (root == null)
return res;
LinkedList<TreeNode> queue = new LinkedList<>();
// 用栈也行
// Stack<List<Integer>> stack = new Stack<>();
queue.offer(root);
while (!queue.isEmpty()) {
int curLevelSize = queue.size();
ArrayList<Integer> curLevel = new ArrayList<>();
for (int i = 0; i < curLevelSize; i++) {
root = queue.poll();
curLevel.add(root.val);
if (root.left != null)
queue.offer(root.left);
if (root.right != null)
queue.offer(root.right);
}
// 先放到栈里
// stack.push(curLevel);
res.add(0, curLevel);
}
// 最后把栈中的list倒出来,就是逆序了
// while (!stack.isEmpty())
// res.add(stack.pop());
return res;
}
}
//leetcode submit region end(Prohibit modification and deletion)
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
}
【leetcode】P107二叉树的层序遍历II
最新推荐文章于 2024-04-28 20:32:04 发布