程序员面试金典---3
首个祖先
方法一:递归
三种情况:
- p、q分别在根节点的左右子树中,那么祖先就是root
- p、q均位于根节点的左子树或右子树中,那么祖先在
root.left
或者root.right
中递归。- p、q的其中一个节点是根节点,祖先为root
var lowestCommonAncestor = function(root, p, q){ // p、q的其中一个节点是根节点,祖先就是root if(!root || root === q || root === q){ return root } // p、q在左子树或者右子树上 let left = lowestCommonAncestor(root.left, p ,q) let right = lowestCommonAncestor(root.right, p ,q) // p、q其中一个是根节点 if(left && right) return root // 可能在左子树或者右子树 return left ? left : right }
求和路径
- 回溯方法:
直接上代码:
var pathSum = function(root, sum) { // 如果为空 if(!root) return 0; // 递归这个节点 + 递归右节点 + 递归左节点 return dfs(root, sum) + pathSum(root.right, sum) + pathSum(root.left, sum) function dfs(root, sum){ if(!root) return 0; // 如果相等于节点,直接递归右节点 if(root.val === sum){ return 1 + dfs(root.left, sum - root.val) + dfs(root.right, sum - root.val) } // 不相同,返回递归左节点和右节点 return dfs(root.left, sum - root.val) + dfs(root.right, sum - root.val) } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!