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

一、题目

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

二、分析

前序遍历,当访问到某一节点后,把节点添加到路径上,并累加该节点的值。如果该节点为叶节点,并且路径中节点值的和刚好等于输入的整数,则打印路径;若当前节点不是叶节点,则继续访问它的子节点。当前节点访问结束后,递归函数将自动回到它的父节点,因此,我们在函数退出前要在路径上删除当前节点并减去当前节点的值。

三、实现

void findpath(BinaryTreeNode* root,int e)
{
   if(pRoot==nullptr)return;
   vector<int>path;
   int cursum=0;
   find(root,path,e,cursum);
}
void find(BinaryTreeNode* root,vector<int> &path,int e,int cursum)
{
   cursum+=root->val;
   path.push_back(root->val);
   bool isleaf=root->left==nullptr&&root->right==nullptr;
   if(cursum==e&&isleaf)
   {
    for(auto it=path.begin();it!=path.end();++it)
     {
         cout<<*iter<<" ";
     }
     cout<<endl;
   }
  if(root->left!=nullptr)find(root,path,e,cursum);
  if(root->right!=nullptr)find(root,path,e,cursum);
  path.pop_back();
}

 

上一篇:Oracle笔记 之 Oracle高级分组函数


下一篇:leetcode974