今日内容:
● 层序遍历 10道题
● 226.翻转二叉树
● 101.对称二叉树
层序遍历
总共10道变种,都可以用bfs的思想解决
- 102.二叉树的层序遍历(opens new window)
- 107.二叉树的层次遍历II(opens new window)
- 199.二叉树的右视图(opens new window)
- 637.二叉树的层平均值(opens new window)
- 429.N叉树的层序遍历(opens new window)
- 515.在每个树行中找最大值(opens new window)
- 116.填充每个节点的下一个右侧节点指针(opens new window)
- 117.填充每个节点的下一个右侧节点指针II(opens new window)
- 104.二叉树的最大深度(opens new window)
- 111.二叉树的最小深度
226. 翻转二叉树
也可以用层序遍历的思想去解决
class Solution {
//迭代的做法
public TreeNode invertTree(TreeNode root) {
if(root == null)return null;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
TreeNode tmp = node.left;
node.left = node.right;
node.right = tmp;
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
return root;
}
}
101. 对称二叉树
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) {
return false;
}
return recur(root.left, root.right);
}
private boolean recur(TreeNode left, TreeNode right) {
if(left == null && right == null)return true;
if(left == null || right == null)return false;
if(left.val != right.val)return false;
return recur(left.left, right.right) && recur(left.right, right.left);
}
}