给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6] 输出:[[1],[3,2,4],[5,6]]
示例 2:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14] 输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
提示:
1000
[0, 10^4]
之间层序遍历的经典思想,稍微把找左右儿子的逻辑改为遍历所有儿子节点即可完成层序遍历。
class Solution {
public List> levelOrder(Node root) {
List> ans=new ArrayList<>();
Deque stack=new ArrayDeque<>();
if(root==null){
return ans;
}
stack.addLast(root);
while (!stack.isEmpty()) {
int len=stack.size();
ArrayList temp=new ArrayList<>();
for(int i=0;i
给定一棵二叉树的根节点 root
,请找出该二叉树中每一层的最大值。
示例1:
输入: root = [1,3,2,5,3,null,9] 输出: [1,3,9]
示例2:
输入: root = [1,2,3] 输出: [1,3]
提示:
[0,104]
-231 <= Node.val <= 231 - 1
思路
还是层序遍历老代码,每次循环记录最大值然后保存即可。
class Solution {
public List largestValues(TreeNode root) {
List ans=new ArrayList<>();
Deque stack=new ArrayDeque<>();
if(root==null){
return ans;
}
stack.addLast(root);
ans.add(root.val);
while (!stack.isEmpty()) {
int len=stack.size();
ArrayList temp=new ArrayList<>();
int max=-2147483648;
for(int i=0;imax)
max=node.left.val;
}
if(node.right!=null){
stack.addLast(node.right);
if(node.right.val>max)
max=node.right.val;
}
stack.pollFirst();
}
if(!stack.isEmpty())
ans.add(max);
}
return ans;
}
}
要注意的点是这段代码的逻辑是判断下一层的最大值,所以到最后一层时要加一个判断栈非空否则会出现最小值。
还是老方法。