【二叉树】打印二叉树中结点数值总和等于某个给定值的所有路径

本文介绍了一种算法,用于在给定的二叉树中找到所有节点数值之和等于特定值的路径。通过递归和迭代两种方式实现,首先从根节点开始遍历,然后在子树中继续寻找符合条件的路径。虽然进行了功能测试,但未充分涵盖边界值和特殊输入的测试情况。
摘要由CSDN通过智能技术生成

问题

给定一棵二叉树,其中每个结点都含有一个数值。设计一个算法,打印结点数值总和等于某个给定值的所有路径。注意:路径不一定非得从二叉树的根结点或叶节点开始或结束。

思路

采用二次遍历的方式。
1. 在函数func1中,先从根结点开始遍历二叉树,到达当前结点current。
2. 将current传入func2中,遍历current子树,打印二叉树中数值总和等于给定值的路径。

两种实现方式

递归和迭代

这里对子树和二叉树采用相同的遍历方式,并分别采用递归和迭代两种方式来实现遍历。当然,也可以对子树采用与原二叉树不同的遍历方式,即交叉使用递归和迭代方式。

递归实现代码

/********************************************
 *  Author        : Dong Huaan
 *  Email         : donghuaan@163.com
 *  Filename      : PathMatchPathInBinaryTree.cpp
 *  Creation time : 2018-01-04 18:01:36
 *  Last modified : 2018-01-04 20:50:37
 *  Description   : ---
 *******************************************/

// TOC: rand situation: O(nlog(n))
// SOC: rand situation: O(log(n))

#include<iostream>
#include<list>
#include"BinaryTree.h"

// 打印链表
void printList(const std::list<int> &path)
{
    if(!path.empty())
    {
        for(std::list<int>::const_iterator iter = path.begin(); iter != path.end(); ++iter)
            std::cout << *iter << "  ";
        std::cout << "\n
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值