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


    发现我自己思考得到的方法相比百度搜索得到的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();
        }
    }
  • 相关阅读:
    Go 指针
    Go 字符串
    Go Maps
    Go 可变参数函数
    Go 数组和切片
    pyqt5实现窗口跳转并关闭上一个窗口
    spy++查找窗口句柄
    Python中Tk模块简单窗口设计
    pyqt5无边框拖动
    pyqt5 GUI教程
  • 原文地址:https://www.cnblogs.com/nice-forever/p/6599366.html
Copyright © 2020-2023  润新知