226. 翻转二叉树
//这道题其实就是遍历二叉树,然后交换每个节点的左右子节点即可。这里我就使用了一个栈来存储需要遍历的节点,每次循环弹出一个,然后交换其左右子节点就好了
class Solution {
public TreeNode invertTree(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
if(root == null) return root;
stack.push(root);
while(!stack.isEmpty()){
TreeNode tmp = stack.pop();
if(tmp.left != null) stack.push(tmp.left);
if(tmp.right != null) stack.push(tmp.right);
TreeNode t = tmp.left;
tmp.left = tmp.right;
tmp.right = t;
}
return root;
}
}
101. 对称二叉树
class Solution { //我这个写法有点丑陋,后面会给出更好的解法
public boolean isSymmetric(TreeNode root) {
List<Integer> levelVal = new ArrayList<>(); //相当于层序遍历,把一层的所有值存起来,如果对应位置为null,则填充一个不可能是真正节点值的一个数字,最后判断这层的值是否是对称的即可
if(root == null) return true;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int size = queue.size();
for(int i = 0; i < size; i++){ //遍历当前层,填充下一层的值
TreeNode tmp = queue.poll();
if(tmp.left != null) {queue.offer(tmp.left); levelVal.add(tmp.left.val);}
else{ levelVal.add(-200); } //没有左孩子,则在左孩子的位置填一个非法值
if(tmp.right != null) {queue.offer(tmp.right); levelVal.add(tmp.right.val);}
else{ levelVal.add(-200); } //同理
}
if(!isSymmetricLevel(levelVal)) return false;
levelVal.clear(); //记得要清空
}
return true;
}
public boolean isSymmetricLevel(List<Integer> levelVal){
ArrayList<Integer> reverse = new ArrayList();
for(Integer i: levelVal){
reverse.add(0, i);
}
return levelVal.equals(reverse);
}
}
怎么理解题意中的对称呢,对于递归版本中,我是这么理解的,其实位于对应对称位置处的节点必须相同。比如对于第二层而言,两个2位置处的节点相同;对于第三层,则是两个3位置处节点相同,两个4处相同。这个相同指的是可以都是null或者两者的val必须相同。
class Solution { //递归版本题解,确实优雅
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
return compare(root.left, root.right); //比较对应位置处节点是否完全相同
}
public boolean compare(TreeNode left, TreeNode right){
if(left == null && right == null) return true;
if(left == null && right != null || left != null && right == null) return false;
if(left.val != right.val) return false;
boolean b1 = compare(left.left, right.right); //比较外侧的对称位置
boolean b2 = compare(left.right, right.left); //比较内测的对称位置
return b1 && b2;
}
}
标签:tmp,right,return,14,随想录,二叉树,null,root,left
From: https://www.cnblogs.com/12sleep/p/18306281