二叉树的层序遍历
模板
//利用一个指针来记录每一层的节点的数量(很关键)
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> reslist=new ArrayList<Integer>();
if(root==null){
return reslist;
}
Queue<TreeNode> que=new LinkedList<>();
que.offer(root); //先把根节点放入队列
while(!que.isEmpty()){
int len=que.size(); //len记录当层节点的数量,下面的while循环根据len来循环。
while(len>0){
TreeNode tmpNode=que.poll(); //poll()的次数就是len的值
if(tmpNode.left!=null){//每poll出来一个节点 就把他的子节点放入队列中
que.offer(tmpNode.left);
}
if(tmpNode.right!=null){
que.offer(tmpNode.right);
}
len--;
}
}
return reslist;
}
}
leetcode226
class Solution {//递归方法:中左右,左右中 都可以。但是左中右不行:先左中之后,中的右就是原来的左,这样就处理不到,原始的右了,如果想用中序遍历 就把right改成left,多处理一次left 其实就是处理原来的right
public TreeNode invertTree(TreeNode root) {
if(root==null) return null;
invertTree(root.left);
invertTree(root.right);
swap(root);
return root;
}
private void swap(TreeNode root){
TreeNode tempNode=root.left;
root.left=root.right;
root.right=tempNode;
}
}
class Solution {//中序遍历
public TreeNode invertTree(TreeNode root) {
if(root==null) return null;
invertTree(root.left);
swap(root);
invertTree(root.left);
return root;
}
private void swap(TreeNode root){
TreeNode tempNode=root.left;
root.left=root.right;
root.right=tempNode;
}
}
leetcode 对称二叉树
class Solution {
public boolean isSymmetric(TreeNode root) {
return compare(root.left,root.right);
}
public boolean compare(TreeNode left,TreeNode right){
//递归结束条件:1左右都为空true 2左空右不空或左不空右空 false 3左值不等于右值 false
if(left==null&&right==null) return true;
if(left==null&&right!=null) return false;
if(left!=null&&right==null) return false;
if(left.val!=right.val) return false;
return compare(left.left,right.right)&&compare(left.right,right.left);
}
}
标签:right,TreeNode,day15,return,null,root,left
From: https://www.cnblogs.com/wdnmdp/p/16756631.html