path_sum

题目描述

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

For example:
Given the below binary tree and sum = 22,

          5
         / \
        4   8
       /   / \
      11  13  4
     /  \      \
    7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

解析思路

题目的意思就是给定一个二叉树,每个结点有数值,给定一个sum,看存不存在一条路径使得该路径上的结点数值和等于sum。这里只要求判断是否存在一条路径,path_sum2则是要求找出所有的路径,这里利用深度优先搜索(DFS)来解决,以给定例子为例分析,判断从根节点是否存在一条sum=22的路径,相当于判断从左儿子开始是否有一条22-5=17的路径,或者从右儿子开始是否有一条22-8=14的路径。

详细代码

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */

    //题目强调是从root到叶子节点  注意叶子节点的定义
    public boolean hasPathSum(TreeNode root, int sum) {
        if(root == null)
        {
            //空树  结束条件之一
            return false;
        }
        else 
        {
            if(root.left==null && root.right==null)
            {
                //叶子节点 left right都为空
                if(sum== root.val)
                {
                    return true;
                }
                else 
                {
                    return false;
                }
            }
            else 
            {
                //非叶子结点
                return hasPathSum(root.left, sum-root.val) | hasPathSum(root.right, sum-root.val);
            }

        }
    }

总结

此题目是关于BST和DFS的,前面word_ladder和word_ladder2 是关于graph的BFS(没有建立图,而是利用题目限制的条件进行搜索,否则超时),可以放在一起总结下,此题目还有path_sum2版本,要求算出所有的路径,我会在接下来的文章中介绍。

`#pragma DATA_SECTION(TRACE_NUM,".Share_space")` 和 `#pragma DATA_ALIGN(TRACE_NUM, 64)` 是用于控制变量存储位置及对齐方式的编译指示符,常见于嵌入式系统开发中。下面详细介绍这两条指令以及后面的二维数组声明。 ### 解释 #### 1. `#pragma DATA_SECTION` `#pragma DATA_SECTION(symbol_name, section_name);` - **作用**:将指定符号(例如变量、函数等)放置到特定的内存段(section)。这允许开发者精确地控制数据存放的位置。 - **例子解释**:这里的意思是把名为 `TRACE_NUM` 的全局变量放到叫做 `.Share_space` 的自定义段里。 ```c #pragma DATA_SECTION(TRACE_NUM, ".Share_space") ``` 这意味着当你构建项目时,链接脚本会检查并确保所有标记为`.Share_space`的部分会被安排在一个特别设定好的地址范围内。 #### 2. `#pragma DATA_ALIGN` `#pragma DATA_ALIGN(symbol_name, alignment_value);` - **作用**:设置给定符号的数据在内存中的对齐属性。这对于优化访问速度非常重要,特别是在处理高速缓存(Cache)或者直接内存访问(DMA)传输的时候。 - **例子解释**:此命令让编译器保证 `TRACE_NUM` 变量按64字节边界对齐,即其起始地址应该是64的倍数。 ```c #pragma DATA_ALIGN(TRACE_NUM, 64) ``` 这样做可以提高某些硬件平台上对此区域读写的效率,并且对于一些特殊用途(如DMA操作)可能是必需的要求。 #### 3. 数组声明 接下来是一行标准C语言语法: ```c int32_t TRACE_NUM[path_sum][DSP_size]; ``` 这条语句创建了一个名称为 `TRACE_NUM` 的二维整型数组,其中每个元素都是有符号长整数 (`int32_t`) 类型;第一维大小由宏或常量 `path_sum` 定义,第二维则取决于 `DSP_size` 的值。 结合上述两个 pragma 指令来看,这个二维数组不仅被分配到了共享空间内并且按照规定的对齐方式进行排列。 --- 这种类型的代码片段通常出现在需要精细化管理资源的应用场景下,比如实时控制系统或者是高度依赖性能表现的任务当中。通过这种方式,程序员可以获得更好的程序执行效能同时保持良好的编码习惯。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值