二叉树路径

 

#include "bitree.h" 
#include <stdio.h>
#include <stdlib.h>
 
bool path(BiTNode* root, BiTNode* node, Stack* s)
{
    BiTNode* T=root;BiTNode* p=NULL;
    if(root==NULL||!is_empty(s)||node==NULL)return false;
    while(T||is_empty(s)){
    while(T!=NULL){push(s,T);
    if(node==T)return true;
    T=T->left;}
    top(s,&T);
    if(!T->right||t->right==NULL){
    pop(s,&T);
    p=T;
    T=NULL;
}else {T=T->right;}
}return false;
}

 

二叉树路径求和问题通常是指给定一个二叉树的根节点和一个整数 `targetSum`,求该二叉树里节点值之和等于 `targetSum` 的路径的数目。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)[^3][^4]。 ### 算法思路 可以采用递归的方式来解决这个问题。因为二叉树的每个节点结构是相同的,所以可以将二叉树中所有的节点,都以根节点的方式处理,找到所有的路径[^1][^2]。 ### 实现代码 以下是使用 Python 实现的代码示例: ```python class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = None class Solution(object): def pathSum(self, root, s): if not root: return [] def dfs(node, curr_sum, s, res): if not node.left and not node.right and sum(curr_sum) == s: res.append(curr_sum) if node.left: dfs(node.left, curr_sum + [node.left.val], s, res) if node.right: dfs(node.right, curr_sum + [node.right.val], s, res) curr_sum, res = [], [] dfs(root, [root.val], s, res) return res # 插入数据 root = TreeNode(5) l1 = TreeNode(4) r1 = TreeNode(8) root.left = l1 root.right = r1 l2 = TreeNode(11) r2 = TreeNode(13) r3 = TreeNode(4) l1.left = l2 r1.left = r2 r1.right = r3 l3 = TreeNode(7) l4 = TreeNode(2) r4 = TreeNode(5) r5 = TreeNode(1) l2.left = l3 l2.right = l4 r3.left = r4 r3.right = r5 solution = Solution() t = solution.pathSum(root, 22) print(t) ``` 上述代码的输出结果是:`[[5, 4, 11, 2], [5, 8, 4, 5]]` [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值