层序遍历
见上个笔记
翻转二叉树
226. 翻转二叉树
本题使用递归比较简单,还是递归的三步骤,递归终止条件、递归的参数和返回值、单次递归规则,注意递归时只能使用前序和后序遍历,如果是中序遍历的化,相等于有一边孩子节点没有处理
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
// 交换根节点的左右孩子
TreeNode tmp = root.right;
root.right = root.left;
root.left = tmp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}
对称二叉树
101. 对称二叉树
将二叉树分为左右两棵子树,判断两棵子树能否翻转,使用递归的方式,比较left.left与right.right,以及left.right与right.left
class Solution {
public boolean isSymmetric(TreeNode root) {
return compare(root.left, root.right);
}
public boolean compare(TreeNode left, TreeNode right) {
if (left == null ^ right == null) {
return false;
}
if (left == null && right == null) {
return true;
}
if (left.val != right.val) {
return false;
}
return compare(left.left, right.right) && compare(left.right, right.left);
}
}