zoukankan      html  css  js  c++  java
  • 二叉树路径和为某一整数

    题目描述:
    输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

    #include<iostream>
    #include <vector>
    
    struct BinaryTreeNode{
        int m_nValue;
        BinaryTreeNode * m_pRight;
        BinaryTreeNode * m_pLeft;
    };
    
    void FindPath4Vars(
        BinaryTreeNode * pRoot,
        int    expectedSum,
        std:: vector<int> path,
        int&    currentSum
        );
    
    void FindPath (BinaryTreeNode* pRoot,  int expectedSum)
    {
        if (pRoot==NULL)
            return;
    
        std:: vector<int> path;
        int currentSum=0;
        FindPath4Vars (pRoot,  expectedSum,  path,  currentSum);
    }
    
    void FindPath4Vars
        (
        BinaryTreeNode * pRoot,
        int    expectedSum,
        std:: vector<int> path,
        int&    currentSum
        )
    {
        currentSum+=pRoot->m_nValue;
        path. push_back (pRoot->m_nValue);
    
        //如果是叶结点,并且路径上结点的和等于输入的值
        //打印出这条路径
        bool isLeaf=pRoot->m_pLeft==NULL&&pRoot->m_pRight==NULL;
        if (currentSum==expectedSum&&isLeaf)
        {
            printf ("A path is found:  ");
            std:: vector<int>:: iterator  iter=path.begin();
            for(;  iter!=path.end();++iter)
                printf( "%d	",  *iter);
    
            printf( "
    ");
        }
    
        //如果不是叶结点,则遍历它的子结点
        if (pRoot->m_pLeft  !=NULL)
            FindPath4Vars (pRoot->m_pLeft,  expectedSum,  path,  currentSum);
        if (pRoot->m_pRight!=NULL)
            FindPath4Vars (pRoot->m_pRight,  expectedSum,  path,  currentSum);
        //在返回到父结点之前,在路径上删除当前结点,
        //并在currentSum中减去当前结点的值
        currentSum-=pRoot->m_nValue;
        path.pop_back();
    }
    
    int main()
    {
    
        BinaryTreeNode * root = new BinaryTreeNode;
        BinaryTreeNode * Node_5 = new BinaryTreeNode;
        BinaryTreeNode * Node_4 = new BinaryTreeNode;
        BinaryTreeNode * Node_7 = new BinaryTreeNode;
        BinaryTreeNode * Node_12 = new BinaryTreeNode;
        root->m_nValue = 10;
        Node_5->m_nValue = 5;
        Node_4->m_nValue = 4;
        Node_7->m_nValue = 7;
        Node_12->m_nValue = 12;
    
        root->m_pLeft=Node_5;
        root->m_pRight=Node_12;
        Node_5->m_pLeft = Node_4;
        Node_5->m_pRight = Node_7;
        Node_4->m_pLeft = NULL;
        Node_4->m_pRight = NULL;
        Node_7->m_pLeft = NULL;
        Node_7->m_pRight = NULL;
        Node_12->m_pLeft = NULL;
        Node_12->m_pRight = NULL;
        
        FindPath(root,22);
    }
  • 相关阅读:
    Dungeon Master(BFS)
    Shuffle'm Up(串)
    分解素因子
    Snowflake Snow Snowflakes(查找)
    求素数(素数筛选+打表)
    A simple problem(并查集判环)
    Eqs(枚举+ hash)
    Squares(枚举+set 查找)
    从控制台输入10个人的年龄放入数组,将十个人的年龄求总和
    数组
  • 原文地址:https://www.cnblogs.com/bendantuohai/p/4528299.html
Copyright © 2011-2022 走看看