力扣102.二叉树的层序遍历
题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/
完整代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> reslist = new ArrayList<List<Integer>>();
Deque<TreeNode> que = new LinkedList<>();
if(root != null) {
que.add(root);
}
while(!que.isEmpty()){
int levelsize=que.size();
List<Integer> res=new ArrayList<>();
for(int i=0;i<levelsize;i++){
TreeNode node=que.poll();
res.add(node.val);
if(node.left!=null) que.add(node.left);
if(node.right!=null) que.add(node.right);
}
reslist.add(res);
}
return reslist;
}
}
力扣226.翻转二叉树
题目链接:https://leetcode.cn/problems/invert-binary-tree/
完整代码
//采用前序后序遍历都可以
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
swap(root);
invertTree(root.left);
invertTree(root.right);
return root;
}
public void swap(TreeNode root){
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;
}
}
力扣101.对称二叉树
题目链接:https://leetcode.cn/problems/symmetric-tree/
思路
判断对称二叉树其实就是判断左右子树是否是可翻转的,即左子树的左孩子和右子树的右孩子是相等的,左子树的右孩子和右子树的左孩子是相等的。
不对称的情况有如下几种:
- 左子树为空,右子树不为空;
- 左子树不为空,右子树为空;
- 左右子树都不为空,但值不相等。
对称的情况有如下两种:
- 左右子树都为空;
- 左右子树都不为空且值相等。
什么时候用后序遍历?
当需要左右孩子的返回值做判断的时候。
完整代码
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 false;
}else if(left!=null && right==null){
return false;
}else if(left==null && right==null){
return true;
}else if(left.val!=right.val){
return false;
}
boolean outside=compare(left.left,right.right);
boolean inside=compare(left.right,right.left);
boolean isSame=outside&&inside;
return isSame;
}
}