文章目录
- 5.6 515_在每个树行中找最大值
- 5.6.1问题
- 5.6.2解法:层序遍历
- 5.7 116_填充每个节点的下一个右侧节点指针
- 5.7.1问题
- 5.7.2解法:层序遍历
- 5.8 116_填充每个节点的下一个右侧节点指针||
- 5.8.1问题
- 5.8.2解法:层序遍历
- 5.9 104_二叉树的最大深度
- 5.9.1问题
- 5.9.2解法:层序遍历
- 5.10 111_二叉树的最小深度
- 5.10.1问题
- 5.10.2解决
5.6 515_在每个树行中找最大值
5.6.1问题
给定一棵二叉树的根节点 root
,请找出该二叉树中每一层的最大值。
- 示例一:
输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
5.6.2解法:层序遍历
class Solution {public List<Integer> largestValues(TreeNode root) {Queue<TreeNode> queue=new LinkedList<>();List<Integer> list=new ArrayList<>();if(root==null){return list;}queue.offer(root);while(!queue.isEmpty()){int len=queue.size();int max=Integer.MIN_VALUE;while(len>0){TreeNode node=queue.poll();max=max>node.val?max:node.val;if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}len--;}list.add(max);}return list;}
}
5.7 116_填充每个节点的下一个右侧节点指针
5.7.1问题
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node {int val;Node *left;Node *right;Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL
。
初始状态下,所有 next 指针都被设置为 NULL
。
- 示例一:
输入:root = [1,2,3,4,5,6,7]
输出:[1,#,2,3,#,4,5,6,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。
5.7.2解法:层序遍历
class Solution {public Node connect(Node root) {Queue<Node> queue=new LinkedList<>();if(root==null){return root;} queue.offer(root);while(!queue.isEmpty()){int len=queue.size();for(int i=0;i<len;i++){Node node=queue.poll();if(i==len-1){//最后一个节点node.next=null;}else{//非最后一个节点node.next=queue.peek();}if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}}}return root;}
}
5.8 116_填充每个节点的下一个右侧节点指针||
5.8.1问题
给定一个二叉树:
struct Node {int val;Node *left;Node *right;Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL
。
初始状态下,所有 next 指针都被设置为 NULL
。
- 示例一:
输入:root = [1,2,3,4,5,null,7]
输出:[1,#,2,3,#,4,5,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),'#' 表示每层的末尾。
5.8.2解法:层序遍历
这道题目说是二叉树,但116题目说是完整二叉树,其实没有任何差别,一样的代码一样的逻辑
5.9 104_二叉树的最大深度
5.9.1问题
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
- 示例一:
输入:root = [3,9,20,null,null,15,7]
输出:3
5.9.2解法:层序遍历
class Solution {public int maxDepth(TreeNode root) {Queue<TreeNode> queue=new LinkedList<>();int max=0;if(root==null){return max;}queue.offer(root);while(!queue.isEmpty()){int len=queue.size();while(len>0){TreeNode node=queue.poll();if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}len--;}max++;}return max;}
}
5.10 111_二叉树的最小深度
5.10.1问题
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
**说明:**叶子节点是指没有子节点的节点。
- 示例一:
输入:root = [3,9,20,null,null,15,7]
输出:2
5.10.2解决
class Solution {public int minDepth(TreeNode root) {Queue<TreeNode> queue=new LinkedList<>();int max=0;if(root==null){return max;}queue.offer(root);while(!queue.isEmpty()){int len=queue.size();while(len>0){TreeNode node=queue.poll();if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}//注意:若该节点的左右孩子均为空,则到达最低点if(node.left==null && node.right==null){max++; //算上该层return max;}len--;}max++;}return max;}
}