513.找树左下角的值
class Solution {
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
TreeNode curEndNode = root;
TreeNode nextEndNode = null;
int cnt = 0;
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node.left != null) {
queue.add(node.left);
nextEndNode = node.left;
}
if (node.right != null) {
queue.add(node.right);
nextEndNode = node.right;
}
if (curEndNode == node) {
curEndNode = nextEndNode;
cnt++;
}
}
curEndNode = root;
queue.add(root);
int curLevel = 0;
int res = 0;
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (curLevel == cnt - 1) {
res = node.val;
break;
}
if (node.left != null) {
queue.add(node.left);
nextEndNode = node.left;
}
if (node.right != null) {
queue.add(node.right);
nextEndNode = node.right;
}
if (curEndNode == node) {
curEndNode = nextEndNode;
curLevel++;
}
}
return res;
}
}
112.路径总和
class Solution {
int[] res = {Integer.MAX_VALUE};
public boolean hasPathSum(TreeNode root, int targetSum) {
if (root == null) {
return false;
}
int cur = 0;
if (targetSum == 0) {
cur = root.val;
targetSum = root.val;
}
int i = pathSum(root, cur, targetSum);
if (res[0] == targetSum) {
return true;
}
return false;
}
public int pathSum(TreeNode node, int cur, int target) {
if (node == null) {
return cur;
}
cur += node.val;
int leftSum = pathSum(node.left, cur, target);
int rightSum = pathSum(node.right, cur, target);
if (node != null && node.left == null && node.right == null) {
if (cur > target) {
return 0;
}
if (cur == target) {
res[0] = target;
return target;
}
return cur;
}
cur -= node.val;
return cur;
}
}
106.从中序与后序遍历序列构造二叉树
class Solution {
Map<Integer, Integer> map;
public TreeNode buildTree(int[] inorder, int[] postorder) {
map = new HashMap<>();
for (int i = 0; i < inorder.length; i++) {
map.put(inorder[i], i);
}
return findNode(inorder, 0, inorder.length, postorder,0, postorder.length);
}
public TreeNode findNode(int[] inorder, int inBegin, int inEnd, int[] postorder, int postBegin, int postEnd) {
if (inBegin >= inEnd || postBegin >= postEnd) {
return null;
}
int rootIndex = map.get(postorder[postEnd - 1]);
TreeNode root = new TreeNode(inorder[rootIndex]);
int lenOfLeft = rootIndex - inBegin;
root.left = findNode(inorder, inBegin, rootIndex,
postorder, postBegin, postBegin + lenOfLeft);
root.right = findNode(inorder, rootIndex + 1, inEnd,
postorder, postBegin + lenOfLeft, postEnd - 1);
return root;
}
}