一句话总结,虽然递归很方便很容易理解但真的不会写啊orz。
原题链接:226 翻转二叉树
递归法秒了。一直找到最底层的left结点和right结点,然后交换位置,再逐层返回。
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) return root;
TreeNode left = invertTree(root.left);
TreeNode right = invertTree(root.right);
root.left = right;
root.right = left;
return root;
}
}
原题链接:101 对称二叉树
还是利用递归。先找到最底层,然后逐一层地比较其值大小,最后返回结果。除了写不来真的容易理解。
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return dfs(root.left, root.right);
}
private boolean dfs(TreeNode left, TreeNode right) {
if (left == null && right == null) return true;
else if (left == null || right == null) return false;
if (left.val != right.val) return false;
return dfs(left.left, right.right) && dfs(left.right, right.left);
}
}