zoukankan      html  css  js  c++  java
  • 在二元树中找出和为某一值的所有路径(树)--最容易理解的版本?

    发现我自己思考得到的方法相比百度搜索得到的TOP5解法似乎更容易理解,所以就把我的思路贴出来供大家借鉴。
    这是一道微软面试题。
    题目:输入一个整数和一棵二元树。
    从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
    打印出和与输入整数相等的所有路径。
    例如 输入整数22和如下二元树
        10 
        /   
       5  12  
      /  
     4  7
    则打印出两条路径:10, 12和10, 5, 7。
     
    思路:使用先序遍历得到树的路径并求和就可以解决这一道题,但是由于需要打印出来,那么就需要把最后一个叶子节点前的节点保存起来,考虑使用容器比较方便。另一方面,如果当前路径得到的和大于输入的数,可以考虑剪枝。
    代码如下:
    void TravelOneSum(TreeNode* root, vector<int> dv, int sum)
    {
        if(root!=NULL)
        {
            if(sum-root->data<0)
            {
                return;
            }
            dv.push_back(root->data);
            if(root->left==NULL && root->right==NULL && (sum-root->data==0))
            {
                for(vector<int>::iterator it=dv.begin();it!=dv.end();++it)
                {
                    cout << *it << ' ';
                }
                cout << endl;
            }
            TravelOneSum(root->left,dv,sum-root->data);
            TravelOneSum(root->right,dv,sum-root->data);
            dv.pop_back();
        }
    }
  • 相关阅读:
    时间复杂度计算
    SQL Server2012编程入门经典(第四版) 读书笔记
    一些编程试题
    Qt 对话框显示控制按钮
    vc++创建文件目录
    配置ubuntu虚拟机备忘
    Qt QThread 多线程使用
    Qt 程序等待多长时间执行Sleep
    Qt 数字和字符处理总结
    c++ 文件utf-8格式
  • 原文地址:https://www.cnblogs.com/nice-forever/p/6599366.html
Copyright © 2011-2022 走看看