NC133 链表的奇偶重排
1、解题思路
采用尾插法,形成两条链表;在结果的时候两个链表连接起来返回就好。
2、代码
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode oddEvenList (ListNode head) {
// write code here
ListNode dummyEven = new ListNode(0);
ListNode dummyOdd = new ListNode(0);
ListNode tailEven = dummyEven;
ListNode tailOdd = dummyOdd;
int cnt = 1;
while (head != null) {
ListNode temp = head.next;
head.next = null;
if (cnt % 2 == 1) {
tailOdd.next = head;
tailOdd = head;
} else {
tailEven.next = head;
tailEven = head;
}
head = temp;
cnt++;
}
tailOdd.next = dummyEven.next;
return dummyOdd.next;
}
}
NC6 二叉树中的最大路径和
1、解题思路
需要计算当前节点的贡献度,以及当前节点可形成路径的最大值。当前节点形成路径的最大值需要和最终的结果进行打擂;当前节点的贡献度合并到其父节点。
2、代码
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
private int ans = Integer.MIN_VALUE;
private int maxPathSumHelper(TreeNode node) {
if (node == null) {
return 0;
}
int leftL = Math.max(maxPathSumHelper(node.left), 0);
int rightL = Math.max(maxPathSumHelper(node.right), 0);
int tempAns = leftL + rightL + node.val;
if (tempAns > ans) {
ans = tempAns;
}
return leftL > rightL ? leftL + node.val : rightL + node.val;
}
public int maxPathSum(TreeNode root) {
// write code here
maxPathSumHelper(root);
return ans;
}
}
NC16 判断二叉树是否对称
1、解题思路
递归求解,如果节点值不同,直接返回false,否则需要判断左子树和右子树是否对称,注意,需要错开。
2、代码
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return bool布尔型
*/
private boolean isSymmetricHelper(TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
} else if (left != null && right != null) {
if (left.val != right.val) {
return false;
}
return isSymmetricHelper(left.right, right.left) && isSymmetricHelper(left.left, right.right);
} else {
return false;
}
}
public boolean isSymmetric(TreeNode root) {
// write code here
if(root == null){
return true;
}
return isSymmetricHelper(root.left, root.right);
}
}