文章目录
- 144.二叉树的前序遍历
- 145.二叉树的后序遍历
- 94.二叉树的中序遍历
- 102.二叉树的层序遍历
- 107.二叉树的层次遍历倒序
- 199.二叉树的右视图
- 637.二叉树的层平均值
- 429.N叉树的层序遍历
- 515.在每个树行中找最大值
- 116.填充每个节点的下一个右侧节点指针
- 104.二叉树的最大深度
- 111.二叉树的最小深度
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();traversal(res,root);return res;}public void traversal(List<Integer> res ,TreeNode root){if(root == null){return;}res.add(root.val);traversal(res,root.left);traversal(res,root.right);}
}
class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();traversal(res,root);return res;}public void traversal(List<Integer> list, TreeNode root){if(root == null){return;}traversal(list,root.left);traversal(list,root.right);list.add(root.val);}
}
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();traversal(res,root);return res;} public void traversal(List<Integer> list,TreeNode root){if(root == null){return;}traversal(list,root.left);list.add(root.val);traversal(list,root.right);}
}
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();traversal(res,root,0);return res;}public void traversal(List<List<Integer>> list,TreeNode root, int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}
class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> res = new ArrayList<>();traversal(res,root,0);Collections.reverse(res);return res;}public void traversal(List<List<Integer>> list,TreeNode root,int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}
class Solution {public List<Integer> rightSideView(TreeNode root) {List<List<Integer>> res = new ArrayList<>();traversal(res,root,0);List<Integer> result = new ArrayList<>();for(List<Integer> list:res){result.add(list.getLast());}return result;}public void traversal(List<List<Integer>> list,TreeNode root,int deep){if(root == null){return;}while(list.size() <deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}
class Solution {public List<Double> averageOfLevels(TreeNode root) {List<List<Integer>> rest = new ArrayList<>();List<Double> res = new ArrayList<>();traversal(rest,root,0);for(List<Integer> l :rest){res.add(l.stream().mapToInt(Integer::intValue).average().orElse(0));}return res;}public void traversal(List<List<Integer>> list,TreeNode root,int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}
class Solution {public List<List<Integer>> levelOrder(Node root) {List<List<Integer>> res = new ArrayList<>();traversal(res,root,0);return res;}public void traversal(List<List<Integer>> list,Node root,int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);for(Node node : root.children){traversal(list,node,deep+1);}}
}
class Solution {public List<Integer> largestValues(TreeNode root) {List<List<Integer>> res = new ArrayList<>();traversal(res,root,0);List<Integer> result = new ArrayList<>();for(List<Integer> l : res){result.add(l.stream().max(Integer::compare).orElse(0));}return result;}public void traversal(List<List<Integer>> list, TreeNode root, int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}
class Solution {public Node connect(Node root) {if(root == null){return root;}Queue<Node> nodeq = new LinkedList<>();nodeq.add(root);while(!nodeq.isEmpty()){int size = nodeq.size();for(int i = 0; i < size; i++){Node node = nodeq.poll();if(i < size - 1){node.next = nodeq.peek();}if(node.left != null){nodeq.add(node.left);}if(node.right != null){nodeq.add(node.right);}}}return root;}}
class Solution {public int maxDepth(TreeNode root) {if(root == null){return 0;}int leftH = maxDepth(root.left);int rightH = maxDepth(root.right);return Math.max(leftH,rightH) + 1;}
}
class Solution {public int minDepth(TreeNode root) {if(root == null){return 0;}int leftH = minDepth(root.left);int rightH = minDepth(root.right);if(leftH == 0 || rightH == 0){return Math.max(leftH,rightH) + 1;}return Math.min(leftH,rightH)+ 1;}
}