二叉树每层最大值
import java.util.*;class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }
}public class Solution {public List<Integer> max_num(TreeNode root) {List<Integer> result = new ArrayList<>(); // 存储每层的最大值if (root == null) {return result; // 如果树为空,返回空列表}Queue<TreeNode> queue = new LinkedList<>(); // 初始化队列queue.offer(root); // 加入根节点while (!queue.isEmpty()) { // 判断队列是否为空int levelSize = queue.size(); // 当前层的节点数int maxVal = Integer.MIN_VALUE; // 当前层的最大值,初始化为最小整数值for (int i = 0; i < levelSize; i++) {TreeNode node = queue.poll(); // 取出队首节点maxVal = Math.max(maxVal, node.val); // 更新当前层的最大值// 将左右子节点加入队列if (node.left != null) {queue.offer(node.left);}if (node.right != null) {queue.offer(node.right);}}result.add(maxVal); // 将当前层的最大值加入结果}return result;}
}
二叉树每层平均值
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<Double>averageOfLevels(TreeNode root){List<Double> result = new ArrayList();if (root==null){return result;}Queue<TreeNode> queue = new LinkedList();queue.offer(root);while(!queue.isEmpty()){int l = queue.size();double sum = 0;for(int i=0;i<l;i++){TreeNode node = queue.poll();sum+=node.val;if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}}result.add(sum/l);}return result;}
}
平衡二叉树
class Solution {public boolean isBalanced(TreeNode root) {if (root == null) {return true;}int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);if (Math.abs(leftHeight - rightHeight) > 1) {return false;}return isBalanced(root.left) && isBalanced(root.right);
}private int getHeight(TreeNode node) {if (node == null) {return 0;}return Math.max(getHeight(node.left), getHeight(node.right)) + 1;
}
}
二叉树对称
class Solution {public boolean isSymmetric(TreeNode root) {if(root==null){return true;}return isMirror(root.left,root.right);}public boolean isMirror(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 isMirror(left.left,right.right) && isMirror(left.right,right.left);}
}