经典算法学习——求二叉树节点和为sum的路径

来源:互联网 发布:wampserver sql密码 编辑:程序博客网 时间:2024/05/21 09:06

       在一棵二叉树中,有多少个叶子节点,就会有多少条从根节点到叶子节点的路径。如果给每一个节点一个data值,那么每一条路径经过的节点data加起来就为sum,现在根据给定的sum,请找出有哪些路径符合这个sum。代码上传至 https://github.com/chenyufeng1991/BinaryTreePath  。

       整体思路就是递归的去检索,每当经过一个节点的时候,就把节点值放入vector中,当到达叶子节点时,判断此时vector中的和是否等于给定sum,等于的话表示这是一条符合条件的路径,打印该路径。否则清空vector,继续检索。

核心代码如下:

void PathLength(Node *node, vector<int> &vec, int sum){    if (node == NULL)    {        return;    }    if (node ->lChild != NULL)    {        vec.push_back(node->data);        PathLength(node->lChild,vec,sum);    }    if (node ->rChild != NULL)    {        vec.push_back(node->data);        PathLength(node->rChild,vec,sum);    }    if (node ->lChild == NULL || node ->rChild == NULL)    {        vec.push_back(node->data);        int length = 0;        for (int i = 0; i < vec.size(); i++)        {            length += vec[i];        }        if (length == sum)        {            for (int i = 0; i < vec.size(); i++)            {                cout << vec[i] << " ";            }            cout << endl;        }        vec.clear();    }}


0 0
原创粉丝点击