重点:
- 将二叉树的三种递归都灵活运用到实际问题中。
Leetcode226.翻转二叉树
public TreeNode invertTree(TreeNode root) {
LinkedList<TreeNode> queue = new LinkedList<>();
if(root!=null) {
queue.add(root);
}
while(!queue.isEmpty()) {
int size = queue.size();
for(int i=0;i<size;i++) {
TreeNode tree = queue.remove();
TreeNode temp = tree.left;
tree.left=tree.right;
tree.right=temp;
if(tree.left!=null) {
queue.add(tree.left);
}
if(tree.right!=null) {
queue.add(tree.right);
}
}
}
return root;
}
LeetCode101.对称二叉树
public boolean isSymmetric(TreeNode root) {
return post(root.left,root.right);
}
/**
* 前序遍历实现判断左右两颗子树
* @param left
* @param right
* @return
*/
public boolean post(TreeNode left,TreeNode right) {
if(left==null&&right==null) {
return true;
}else if(left!=null&&right==null) {
return false;
}else if(left==null&&right!=null){
return false;
}else if(left.val!=right.val) {
return false;
}
boolean bool1 = post(left.left,right.right);
boolean bool2 = post(left.right,right.left);
return bool1&&bool2;
}
LeetCode104.二叉树的最大深度
public int maxDepth(TreeNode root) {
if(root==null) {
return dept;
}
count(root,1);
return dept;
}
public int dept = 0;
public void count(TreeNode root,Integer max) {
//更新最大值
dept = dept > max ? dept : max;
//遍历到了叶子结点
if(root.left==null&&root.right==null) {
return ;
}
//左右遍历
if(root.left!=null) {
count(root.left,max+1);
}
if(root.right!=null) {
count(root.right,max+1);
}
}
LeetCode111.二叉树的最小深度
public int dept = Integer.MAX_VALUE;
public void min (TreeNode root,int max) {
if(root.left==null&&root.right==null) {
dept = dept < max ? dept : max;
return ;
}
if(root.left!=null) {
min(root.left,max+1);
}
if(root.right!=null) {
min(root.right,max+1);
}
}
public int minDepth(TreeNode root) {
if(root==null) {
return 0;
}else {
min(root,1);
}
return dept;
}