102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null){
return new ArrayList<>();
}
List<List<Integer>> res= new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
List<Integer> temp = new ArrayList<>();
int queLen=queue.size();
for (int i = 0; i <queLen ; i++) {
TreeNode treeNode = queue.poll();
temp.add(treeNode.val);
if(treeNode.left!=null){
queue.add(treeNode.left);
}
if(treeNode.right!=null){
queue.add(treeNode.right);
}
}
res.add(temp);
}
return res;
}
107. 二叉树的层序遍历 II
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
public List<List<Integer>> levelOrderBottom(TreeNode root) {
while(root==null){
return new ArrayList<>();
}
LinkedList<List<Integer>> res= new LinkedList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
List<Integer> temp = new ArrayList<>();
int queLen=queue.size();
for (int i = 0; i <queLen ; i++) {
TreeNode treeNode = queue.poll();
temp.add(treeNode.val);
if(treeNode.left!=null){
queue.add(treeNode.left);
}
if(treeNode.right!=null){
queue.add(treeNode.right);
}
}
res.addFirst(temp);
}
return res;
}
199. 二叉树的右视图
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
public List<Integer> rightSideView(TreeNode root) {
while(root==null){
return new ArrayList<>();
}
List<Integer> res= new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int queLen=queue.size();
for (int i = 0; i <queLen ; i++) {
TreeNode treeNode = queue.poll();
if(treeNode.left!=null){
queue.add(treeNode.left);
}
if(treeNode.right!=null){
queue.add(treeNode.right);
}
if(i==queLen-1){
res.add(treeNode.val);
}
}
}
return res;
}
|