leetcode230/257 二叉树节点/路径相关题目

本文探讨了三种与二叉树节点和路径相关的算法问题:求和为特定值的路径、获取所有路径以及在二叉搜索树中找到第K小的节点。针对每种问题,分别提供了递归解决方案,并强调了关键实现细节,如暂停递归的条件、路径表示以及中序遍历的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

都是和二叉树的节点/路径相关的题目:

二叉树中和为某一值的路径
二叉树的所有路径

二叉搜索树中第K小的节点

二叉树中和为某一值的路径

老样子,看到这道题第一还是递归。但是这题写下来的感觉是那种看上去不难,但是很容易写错细节
需要注意的有几个点⚠️ 
1. 暂停递归的点有三个条件:无左/右子节点,总和等于期望值。这个位置需要设置好

2. 必须写slice用于浅拷贝,不然用的都是同一个地址,会对结果有影响

var pathSum = function(root, target) {
    if(!root) return []
    const res=[]
    function tra(root,remain,tmp){
        if(root.val===remain&&!root.left&&!root.right){
           res.push(tmp)
        }
        tmp.push(root.val)
        if(root.left) tra(root.left,remain-root.val,tmp.slice())
        if(root.right) tra(root.right,remain-root.val,tmp.slice())
    }
    tra(root,target,[])
    return res
};

二叉树的所有路径

这道题主要需要注意的点是什么时候加上节点的值、什么时候加上箭头

var binaryTreePaths = function(root) {
    let res=[]
    function tra(root,str){
        str+=root.val
        if(!root.left&&!root.right){
            res.push(str)
        }
        str+='->'
        if(root.left) tra(root.left,str)
        if(root.right) tra(root.right,str)
    }
    tra(root,'')
    return res
};

二叉搜索树中第K小的节点

中序遍历+stack[k-1]

var kthSmallest = function(root, k) {
    let stack=[]
    function tra(root,stack){
        if(!root){
            return stack
        }
        tra(root.left,stack)
        stack.push(root.val)
        tra(root.right,stack)
        return stack
    }
    tra(root,stack)
    return stack[k-1]
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值