zoukankan      html  css  js  c++  java
  • 九度 题目1368:二叉树中和为某一值的路径


    和之前的一篇分析的结果一样。当须要枚举可能性的时候,使用DFS的方法进行搜索

    然后採用回溯的方法进行节点的输出。


    本题值得注意的两点是

    1:必须是叶子节点。中间节点不能够

    2:由于是有序的输出,所以。把节点交换一下。使得左子树小于又子树


    #include <stdio.h>
    #include <vector>
    using namespace std;
    struct Node
    {
        int value,lchild,rchild;
    }nodes[10010];
    vector<int> result;
    void dfs(int count,int sum,int i)
    {
        if(i==-1)
            return ;
        if(sum==count+nodes[i].value&&nodes[i].lchild==-1&&nodes[i].rchild==-1)
        {
            result.push_back(i);
            printf("A path is found:");
            for(int j=0;j<result.size();j++)
                printf(" %d",result[j]);
            printf("
    ");
            result.pop_back();
            return;
        }
        if(sum>count+nodes[i].value)
        {
            result.push_back(i);
            dfs(count+nodes[i].value,sum,nodes[i].lchild);
            dfs(count+nodes[i].value,sum,nodes[i].rchild);
            result.pop_back();
        }
    }
    int main()
    {
        int num,sum;
        //freopen("data.in","r",stdin);
        while(scanf("%d%d",&num,&sum)!=EOF)
        {
            result.clear();
            for(int i=1;i<=num;i++)
            {
                scanf("%d%d%d",&nodes[i].value,&nodes[i].lchild,&nodes[i].rchild);
                if(nodes[i].lchild>nodes[i].rchild)
                {
                    int tmp=nodes[i].lchild;
                    nodes[i].lchild=nodes[i].rchild;
                    nodes[i].rchild=tmp;
                }
            }
            printf("result:
    ");
            dfs(0,sum,1);
        }
        return 0;
    }
    /**************************************************************
        Problem: 1368
        User: vincent_ynh
        Language: C++
        Result: Accepted
        Time:30 ms
        Memory:1140 kb
    ****************************************************************/


  • 相关阅读:
    Arch Linux 安装 ibus-rime
    macOS安装Python MySQLdb
    CentOS 7 安装 gcc 4.1.2
    Windows 10安装Python 2.7和MySQL-python
    小米Air安装Arch Linux之图形界面配置(Gnome 和 sway)持续更新中……
    小米Air 13.3 安装Arch Linux
    Linux Shell脚本攻略总结(1)
    Ubuntu下删除配置错误或者失败的安装包
    oProfile的安装与使用
    动态链接库VS静态链接库
  • 原文地址:https://www.cnblogs.com/llguanli/p/6951966.html
Copyright © 2011-2022 走看看