- 226. 翻转二叉树
class Solution {
public TreeNode invertTree(TreeNode root) {
//终止条件,节点为空
if(root==null){
return root
}
//交换当前节点的左右子树
TreeNode tmp = root.right
root.right=root.left
root.left=tmp
//继续交换下一层左右子树
invertTree(root.left)
invertTree(root.right)
return root
}
}
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null){
return root
}
Queue<TreeNode> queue = new ArrayDeque<>()
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 true;
}
return dfs(root.left,root.right);
}
public boolean dfs(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 dfs(left.left,right.right)&&dfs(left.right,right.left);
}
}
public boolean isSymmetric(TreeNode root) {
if(root==null){
return true;
}
Queue<TreeNode> queue= new LinkedList<>();//LinkedList可以入队null,ArrayDeque不行会报错
queue.add(root.left);
queue.add(root.right);
while(!queue.isEmpty()){
TreeNode left = queue.poll();
TreeNode right= queue.poll();
//两个节点为null的时候继续循环,只有一个为空或不相等的时候返回false
if(left==null&&right==null){
continue;
}
if(left==null||right==null){
return false;
}
if(left.val!=right.val){
return false;
}
//把左节点的左孩子,右节点的右孩子放进队列
queue.add(left.left);
queue.add(right.right);
//把左节点的右孩子,右节点的左孩子放进队列
queue.add(left.right);
queue.add(right.left);
}
return true;
}
}