思路都在注释里,就是bfs层序遍历
javaclass Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> averages = new ArrayList<>(); //答案数组
if (root == null) { //特判
return averages;
}
Queue<TreeNode> queue = new LinkedList<>(); //bfs队列
queue.offer(root); //根结点入队
while (!queue.isEmpty()) {
int levelSize = queue.size();
double sum = 0;
for (int i = 0; i < levelSize; i++) { //入队并计算
TreeNode node = queue.poll();
sum += node.val;
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
averages.add(sum / levelSize);
}
return averages;
}
}
javapublic class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int lenA = 0, lenB = 0;
ListNode tempA = headA, tempB = headB;
// 计算两个链表的长度
while (tempA != null) {
lenA++;
tempA = tempA.next;
}
while (tempB != null) {
lenB++;
tempB = tempB.next;
}
// 对齐链表
tempA = headA;
tempB = headB;
if (lenA > lenB) {
for (int i = 0; i < lenA - lenB; i++) {
tempA = tempA.next;
}
} else {
for (int i = 0; i < lenB - lenA; i++) {
tempB = tempB.next;
}
}
// 遍历链表,找到相交节点
while (tempA != null && tempB != null) {
if (tempA == tempB) {
return tempA;
}
tempA = tempA.next;
tempB = tempB.next;
}
return null;
}
}
javaclass Solution {
public boolean isSymmetric(TreeNode root) {
return isMirror(root.left,root.right);
}
private boolean isMirror(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null) return true;
if (t1 == null || t2 == null) return false;
return (t1.val == t2.val)
&& isMirror(t1.right, t2.left)
&& isMirror(t1.left, t2.right);
}
}
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!