二叉树中和为某一值的路径

来源:互联网 发布:网络交易管理办法 pdf 编辑:程序博客网 时间:2024/06/03 21:31

题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
      10   
      / \  
     5  12   
      / \   
      4    7
则打印出两条路径:10, 12和10, 5, 7。


先序遍历树即可得到结果。

void FindPath   (    BSTreeNode*        pTreeNode,      // a node of binary tree    int                expectedSum,    // the expected sum    std::vector<INT>&  path,           // a path from root to current node    int&               currentSum      // the sum of path    )   {       if(!pTreeNode)           return;         currentSum += pTreeNode->m_nValue;       path.push_back(pTreeNode->m_nValue);        //判断是否满足条件    if(currentSum == expectedSum && !pTreeNode->m_pLeft && !pTreeNode->m_pRight)       {           std::vector<INT>::iterator iter = path.begin();           for(; iter != path.end(); ++ iter)               printf("%d\t",*iter);           printf("\n");       }         FindPath(pTreeNode->m_pLeft, expectedSum, path, currentSum);         FindPath(pTreeNode->m_pRight, expectedSum, path, currentSum);        //回溯    currentSum -= pTreeNode->m_nValue;       path.pop_back();   }  

回溯,遍历!!

0 0
原创粉丝点击