《LeetCode力扣练习》代码随想录——二叉树(二叉树的层序遍历—Java)
刷题思路来源于 代码随想录
102. 二叉树的层序遍历
-
二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if(root==null){ return new ArrayList<List<Integer>>(); } List<List<Integer>> result=new ArrayList<>(); Deque<TreeNode> queue =new ArrayDeque<>(); queue.offer(root); while(queue.size()!=0){ int num=queue.size(); List<Integer> list=new ArrayList<>(); while(num>0){ TreeNode temp=queue.poll(); list.add(temp.val); if(temp.left!=null){ queue.offer(temp.left); } if(temp.right!=null){ queue.offer(temp.right); } num--; } result.add(list); } return result; } }
107. 二叉树的层序遍历 II
-
二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { if (root == null) { return new ArrayList<List<Integer>>(); } List<List<Integer>> result = new ArrayList<>(); Deque<TreeNode> queue = new ArrayDeque<>(); queue.offer(root); while (queue.size() != 0) { int num = queue.size(); List<Integer> list = new ArrayList<>(); while (num > 0) { TreeNode temp = queue.poll(); list.add(temp.val); if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } num--; } result.add(list); } Collections.reverse(result); return result; } }
199. 二叉树的右视图
-
二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<Integer> rightSideView(TreeNode root) { if (root == null) { return new ArrayList<Integer>(); } List<Integer> result = new ArrayList<>(); Deque<TreeNode> queue = new ArrayDeque<>(); queue.offer(root); while (queue.size() != 0) { int num = queue.size(); while (num > 0) { TreeNode temp = queue.poll(); if (num == 1) { result.add(temp.val); } if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } num--; } } return result; } }
637. 二叉树的层平均值
-
二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<Double> averageOfLevels(TreeNode root) { if(root==null){ return new ArrayList<Double>(); } List<Double> result=new ArrayList<>(); Deque<TreeNode> queue=new ArrayDeque<>(); queue.offer(root); while(queue.size()!=0){ int num=queue.size(); int size=num; double sum=0.0; while(num>0){ TreeNode temp=queue.poll(); sum=sum+temp.val; if(temp.left!=null){ queue.offer(temp.left); } if(temp.right!=null){ queue.offer(temp.right); } num--; } result.add(sum/size); } return result; } }
429. N 叉树的层序遍历
-
二叉树
/* // Definition for a Node. class Node { public int val; public List<Node> children; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, List<Node> _children) { val = _val; children = _children; } }; */ class Solution { public List<List<Integer>> levelOrder(Node root) { if (root == null) { return new ArrayList<List<Integer>>(); } List<List<Integer>> result = new ArrayList<>(); Deque<Node> queue = new ArrayDeque<>(); queue.offer(root); while (queue.size() != 0) { int num = queue.size(); List<Integer> list = new ArrayList<>(); while (num > 0) { Node temp = queue.poll(); list.add(temp.val); for (Node node : temp.children) { if (node != null) { queue.offer(node); } } num--; } result.add(list); } return result; } }
515. 在每个树行中找最大值
-
二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<Integer> largestValues(TreeNode root) { if (root == null) { return new ArrayList<Integer>(); } List<Integer> result = new ArrayList<>(); Deque<TreeNode> queue = new ArrayDeque<>(); queue.offer(root); while (queue.size() != 0) { int num = queue.size(); int max = Integer.MIN_VALUE; while (num > 0) { TreeNode temp = queue.poll(); max = max > temp.val ? max : temp.val; if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } num--; } result.add(max); } return result; } }
116. 填充每个节点的下一个右侧节点指针
-
二叉树
/* // Definition for a Node. class Node { public int val; public Node left; public Node right; public Node next; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, Node _left, Node _right, Node _next) { val = _val; left = _left; right = _right; next = _next; } }; */ class Solution { public Node connect(Node root) { if (root == null) { return null; } Deque<Node> queue = new ArrayDeque<>(); root.next = null; queue.offer(root); while (queue.size() != 0) { int num = queue.size() - 1; Node temp = queue.poll(); if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } while (num > 0) { temp.next = queue.poll(); temp = temp.next; if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } num--; } temp.next = null; } return root; } }
117. 填充每个节点的下一个右侧节点指针 II
-
二叉树
/* // Definition for a Node. class Node { public int val; public Node left; public Node right; public Node next; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, Node _left, Node _right, Node _next) { val = _val; left = _left; right = _right; next = _next; } }; */ class Solution { public Node connect(Node root) { if (root == null) { return null; } Deque<Node> queue = new ArrayDeque<>(); queue.offer(root); while (queue.size() != 0) { int num = queue.size() - 1; Node temp = queue.poll(); if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } while (num > 0) { temp.next = queue.poll(); temp = temp.next; if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } num--; } temp.next=null; } return root; } }
104. 二叉树的最大深度
-
二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } int result = 0; Deque<TreeNode> queue = new ArrayDeque<>(); queue.offer(root); while (queue.size() != 0) { int num = queue.size(); result++; while (num > 0) { TreeNode temp = queue.poll(); if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } num--; } } return result; } }
111. 二叉树的最小深度
-
二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int minDepth(TreeNode root) { if(root==null){ return 0; } int result=0; Deque<TreeNode> queue=new ArrayDeque<>(); queue.offer(root); while(queue.size()!=0){ int num=queue.size(); result++; while(num>0){ TreeNode temp=queue.poll(); if(temp.left==null&&temp.right==null){ return result; } if(temp.left!=null){ queue.offer(temp.left); } if(temp.right!=null){ queue.offer(temp.right); } num--; } } return result; } }