Leetcode 226:
https://leetcode.com/problems/remove-linked-list-elements/description/
题目的第一想法:
这道题并不困难,只要更改左右的值就好。而无论从底往上还是从上到底的方向都无所谓。但因为从上到底比较好些,因此采用从上到底的写法。然后基本上只要交换node就好(不是node存储的值而是node本身)
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null){
return null;
}
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}
Leetcode 101:
https://leetcode.com/problems/symmetric-tree/description/
题目的第一想法:
这个问题是我过去做过的一道题。我觉得这个东西的巧妙的点在于如何把recurssion的理念运用到这种偏大局观的问题。大局观的意思是我们需要对于树的整体做一个对比,而非真的深入到各个node中来修改。总的来说使用递归左比右,右比左,设置好stop condition是不难做出来的
class Solution {
public boolean isSymmetric(TreeNode root) {
return isSymmetric(root.left, root.right);
}
public boolean isSymmetric(TreeNode left, TreeNode right){
if(left == null && right == null){
return true;
}else if(left == null || right == null){
return false;
}else if(left.val != right.val){
return false;
}
return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
}