树-路径相关问题|树

1、树的路径有多种定义:

  • 从根节点开始到叶节点的结束的一个序列,显然路径的个数为根节点的个数。
  • 从任意一个节点出发,任意一个节点结束。

2、树路径相关的问题:

  • 输入一棵二叉树和一个整数, 打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树中和为某一值的路径

解法:采用前序遍历和一个辅助栈,每次访问到节点都入栈,到了叶节点,计算和是否和参数一样,一样把栈全部数据输出(这里不是弹栈)


template <typename T>
void GetSumPath1(T Tree,int Sum,Stack<ElemType> &MyStack,int TempSum=0)
{
    //只有空树会到这里来,叶节点都被下面承包了,不会达到叶节点后面
    if (Tree==NULL)
    {
        return;
    }

    //计算当前的和
    TempSum += Tree->data;

    //当前路径最后一个节点入栈
    MyStack.push(Tree->data);

    //判断是否是叶节点
    if ((Tree->lchild==NULL)&&(Tree->rchild==NULL))
    {
        if (Sum==TempSum)
        {
            //输出序列
            MyStack.GetAllStackDataInNormalOrderWithoutPop();
        }
    }
    else
    {
        GetSumPath1(Tree->lchild,Sum,MyStack,TempSum);
        GetSumPath1(Tree->rchild,Sum,MyStack,TempSum);
    }

    MyStack.pop();
}

template <typename T>
void GetSumPath(T Tree,int Sum)
{
    Stack<ElemType> MyStack(100);

    GetSumPath1(Tree,Sum,MyStack);

    //MyStack.~Stack();
};

void GetAllStackDataInNormalOrderWithoutPop()
    {
        for (int i=0;i<HeadPtr;i++)
        {
            printf("%d  ",Buff[i]);
        }
        printf("\n");
    }

Python版本:

# 输出路径的和为某个值
    def get_fixed_sum_paths(self,root,sum,buff = None):
        if not root:
            return

        if buff is None:
            buff = []

        buff.append(root.data)
        sum -= root.data

        if not (root.lc or root.rc):
            if sum == 0 and len(buff) > 0 :
                print(buff)
            buff.pop()
            return

        self.get_fixed_sum_paths(root.lc,sum,buff)
        self.get_fixed_sum_paths(root.rc,sum,buff)
        buff.pop()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 11,101评论 0 19
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 14,592评论 0 25
  • 因为之前就复习完数据结构了,所以为了保持记忆,整理了一份复习纲要,复习的时候可以看着纲要想具体内容。 树 树的基本...
    牛富贵儿阅读 12,059评论 3 10
  • 0. 什么是树 数据的基本单位是数据元素,在涉及到数据处理时数据元素之间的关系称之为结构,我们依据数据元素之间关系...
    安安zoe阅读 3,398评论 0 0
  • 1998年,正读大三的我因为一次意外事故,眼睛失明了,曾经明艳的一切突然全部陷进了黑暗。我所竭力做出豁达和坚强的样...
    海目青阅读 3,919评论 0 3

友情链接更多精彩内容