代随想录 第十八天 | ● 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树 | 106,105不会 以后周一休息
leetcode:513. 找树左下角的值 - 力扣(LeetCode)
思路:是找最深左下角的值,不是找左节点最深的值!!遍历深度,判断最大深度,存储后再与下一个相同深度的比较,先左后右,也就是从左到右的顺序来判断的,所以能找到树下左下角的值
class Solution { int maxdepth = 0; int result = 0; public int findBottomLeftValue(TreeNode root) { result =root.val; getmaxleft(root ,maxdepth); return result; } private void getmaxleft(TreeNode root, int depth) { if( root == null) return; //终止条件 if( root.left == null && root.right == null){ //判断是不是最深叶子节点 if(depth > maxdepth){ maxdepth = depth; result = root.val; } } //判断下一层左节点 if(root.left != null){ depth++; //回溯 getmaxleft(root.left,depth); depth--; } //判断下一层右节点 if(root.right != null){ depth++; //回溯 getmaxleft(root.right,depth); depth--; } } }
leetcode:112. 路径总和 - 力扣(LeetCode)
class Solution { public boolean hasPathSum(TreeNode root, int targetSum) { if(root == null) return false; int count = targetSum; return counttreepath(root,count - root.val); } private boolean counttreepath(TreeNode root, int count) { if(root.left == null && root.right == null && count == 0) return true; if(root.left == null && root.right == null) return false; if(root.left != null){ count-= root.left.val; //回溯 if(counttreepath(root.left,count)) return true; count+= root.left.val; } if(root.right != null){ count-= root.right.val; //回溯 if(counttreepath(root.right,count)) return true; count+= root.right.val; } return false; } }
leetcode:106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode)
真不会啊哥